Skip to content

Commit 6f2e8af

Browse files
committed
use volatile boolean instead of AtomicBoolean
1 parent 46dbc86 commit 6f2e8af

File tree

1 file changed

+37
-33
lines changed

1 file changed

+37
-33
lines changed

src/main/java/rx/internal/operators/OperatorSkipTimed.java

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
package rx.internal.operators;
1717

1818
import java.util.concurrent.TimeUnit;
19-
import java.util.concurrent.atomic.AtomicBoolean;
2019

21-
import rx.*;
2220
import rx.Observable.Operator;
21+
import rx.Scheduler;
2322
import rx.Scheduler.Worker;
23+
import rx.Subscriber;
2424
import rx.functions.Action0;
2525

2626
/**
@@ -42,44 +42,48 @@ public OperatorSkipTimed(long time, TimeUnit unit, Scheduler scheduler) {
4242
public Subscriber<? super T> call(final Subscriber<? super T> child) {
4343
final Worker worker = scheduler.createWorker();
4444
child.add(worker);
45-
final AtomicBooleanAction gate = new AtomicBooleanAction();
46-
worker.schedule(gate, time, unit);
47-
return new Subscriber<T>(child) {
45+
SkipTimedSubscriber<T> subscriber = new SkipTimedSubscriber<T>(child);
46+
worker.schedule(subscriber, time, unit);
47+
return subscriber;
48+
}
49+
50+
final static class SkipTimedSubscriber<T> extends Subscriber<T> implements Action0 {
4851

49-
@Override
50-
public void onNext(T t) {
51-
if (gate.get()) {
52-
child.onNext(t);
53-
}
54-
}
52+
Subscriber<? super T> child;
53+
volatile boolean gate;
5554

56-
@Override
57-
public void onError(Throwable e) {
58-
try {
59-
child.onError(e);
60-
} finally {
61-
unsubscribe();
62-
}
63-
}
55+
SkipTimedSubscriber(Subscriber<? super T> child) {
56+
this.child = child;
57+
}
6458

65-
@Override
66-
public void onCompleted() {
67-
try {
68-
child.onCompleted();
69-
} finally {
70-
unsubscribe();
71-
}
59+
@Override
60+
public void call() {
61+
gate = true;
62+
}
63+
64+
@Override
65+
public void onNext(T t) {
66+
if (gate) {
67+
child.onNext(t);
7268
}
73-
};
74-
}
75-
76-
final static class AtomicBooleanAction extends AtomicBoolean implements Action0 {
69+
}
7770

78-
private static final long serialVersionUID = 8308944559386967982L;
71+
@Override
72+
public void onError(Throwable e) {
73+
try {
74+
child.onError(e);
75+
} finally {
76+
unsubscribe();
77+
}
78+
}
7979

8080
@Override
81-
public void call() {
82-
set(true);
81+
public void onCompleted() {
82+
try {
83+
child.onCompleted();
84+
} finally {
85+
unsubscribe();
86+
}
8387
}
8488

8589
}

0 commit comments

Comments
 (0)