diff --git a/src/main/java/rx/internal/schedulers/CachedThreadScheduler.java b/src/main/java/rx/internal/schedulers/CachedThreadScheduler.java index 1ebfa56fe4..5da49b5635 100644 --- a/src/main/java/rx/internal/schedulers/CachedThreadScheduler.java +++ b/src/main/java/rx/internal/schedulers/CachedThreadScheduler.java @@ -178,9 +178,7 @@ private static final class EventLoopWorker extends Scheduler.Worker { private final CachedWorkerPool pool; private final ThreadWorker threadWorker; @SuppressWarnings("unused") - volatile int once; - static final AtomicIntegerFieldUpdater ONCE_UPDATER - = AtomicIntegerFieldUpdater.newUpdater(EventLoopWorker.class, "once"); + final AtomicInteger once = new AtomicInteger(); EventLoopWorker(CachedWorkerPool pool) { this.pool = pool; @@ -189,7 +187,7 @@ private static final class EventLoopWorker extends Scheduler.Worker { @Override public void unsubscribe() { - if (ONCE_UPDATER.compareAndSet(this, 0, 1)) { + if (once.compareAndSet(0, 1)) { // unsubscribe should be idempotent, so only do this once pool.release(threadWorker); }