Skip to content

Commit 387c765

Browse files
committed
Switch to AtomicIntegerFieldUpdater and volatile int, instead of AtomicBoolean
1 parent 564ce4a commit 387c765

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

rxjava-core/src/main/java/rx/schedulers/CachedThreadScheduler.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
import java.util.Iterator;
2525
import java.util.concurrent.*;
26-
import java.util.concurrent.atomic.AtomicBoolean;
26+
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
2727

2828
/* package */class CachedThreadScheduler extends Scheduler {
2929
private static final String WORKER_THREAD_NAME_PREFIX = "RxCachedThreadScheduler-";
@@ -109,15 +109,17 @@ public Worker createWorker() {
109109
private static class EventLoopWorker extends Scheduler.Worker {
110110
private final CompositeSubscription innerSubscription = new CompositeSubscription();
111111
private final PoolWorker poolWorker;
112-
private final AtomicBoolean releasePoolWorkerOnce = new AtomicBoolean(false);
112+
volatile int once;
113+
static final AtomicIntegerFieldUpdater<EventLoopWorker> ONCE_UPDATER
114+
= AtomicIntegerFieldUpdater.newUpdater(EventLoopWorker.class, "once");
113115

114116
EventLoopWorker(PoolWorker poolWorker) {
115117
this.poolWorker = poolWorker;
116118
}
117119

118120
@Override
119121
public void unsubscribe() {
120-
if (releasePoolWorkerOnce.compareAndSet(false, true)) {
122+
if (ONCE_UPDATER.compareAndSet(this, 0, 1)) {
121123
// unsubscribe should be idempotent, so only do this once
122124
CachedWorkerPool.INSTANCE.release(poolWorker);
123125
}

0 commit comments

Comments
 (0)