Skip to content

Commit f2ef8f0

Browse files
author
jmhofer
committed
switched OperationInterval implementation over to use periodic scheduling
1 parent 5f34896 commit f2ef8f0

File tree

2 files changed

+14
-30
lines changed

2 files changed

+14
-30
lines changed

rxjava-core/src/main/java/rx/Scheduler.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,8 @@
1515
*/
1616
package rx;
1717

18-
import static org.mockito.Matchers.anyLong;
19-
import static org.mockito.Mockito.mock;
20-
import static org.mockito.Mockito.never;
21-
import static org.mockito.Mockito.times;
22-
import static org.mockito.Mockito.verify;
18+
import static org.mockito.Matchers.*;
19+
import static org.mockito.Mockito.*;
2320

2421
import java.util.Date;
2522
import java.util.concurrent.TimeUnit;

rxjava-core/src/main/java/rx/operators/OperationInterval.java

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import java.util.concurrent.Executors;
2222
import java.util.concurrent.TimeUnit;
23-
import java.util.concurrent.atomic.AtomicBoolean;
2423

2524
import org.junit.Before;
2625
import org.junit.Test;
@@ -57,47 +56,35 @@ public static Func1<Observer<Long>, Subscription> interval(long interval, TimeUn
5756
}
5857

5958
private static class Interval implements Func1<Observer<Long>, Subscription> {
60-
private final long interval;
59+
private final long period;
6160
private final TimeUnit unit;
6261
private final Scheduler scheduler;
6362

6463
private long currentValue;
65-
private final AtomicBoolean complete = new AtomicBoolean();
6664

67-
private Interval(long interval, TimeUnit unit, Scheduler scheduler) {
68-
this.interval = interval;
65+
private Interval(long period, TimeUnit unit, Scheduler scheduler) {
66+
this.period = period;
6967
this.unit = unit;
7068
this.scheduler = scheduler;
7169
}
7270

7371
@Override
7472
public Subscription call(final Observer<Long> observer) {
75-
scheduler.schedule(new IntervalAction(observer), interval, unit);
76-
return Subscriptions.create(new Action0() {
73+
final Subscription wrapped = scheduler.schedulePeriodically(new Action0() {
7774
@Override
7875
public void call() {
79-
complete.set(true);
76+
observer.onNext(currentValue);
77+
currentValue++;
8078
}
81-
});
82-
}
83-
84-
private class IntervalAction implements Action0 {
85-
private final Observer<Long> observer;
86-
87-
private IntervalAction(Observer<Long> observer) {
88-
this.observer = observer;
89-
}
79+
}, period, period, unit);
9080

91-
@Override
92-
public void call() {
93-
if (complete.get()) {
81+
return Subscriptions.create(new Action0() {
82+
@Override
83+
public void call() {
84+
wrapped.unsubscribe();
9485
observer.onCompleted();
95-
} else {
96-
observer.onNext(currentValue);
97-
currentValue++;
98-
scheduler.schedule(this, interval, unit);
9986
}
100-
}
87+
});
10188
}
10289
}
10390

0 commit comments

Comments
 (0)