Skip to content

Commit 9cb6d81

Browse files
Merge pull request #909 from benjchristensen/scheduler-plugin
Scheduler Plugin Refactor
2 parents bccac64 + 07ce114 commit 9cb6d81

File tree

7 files changed

+70
-55
lines changed

7 files changed

+70
-55
lines changed

rxjava-core/src/main/java/rx/plugins/RxJavaDefaultSchedulers.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package rx.plugins;
1717

1818
import rx.Scheduler;
19-
import rx.functions.Func0;
2019

2120
/**
2221
* Define alternate Scheduler implementations to be returned by the `Schedulers` factory methods.
@@ -27,17 +26,23 @@
2726
public abstract class RxJavaDefaultSchedulers {
2827

2928
/**
30-
* Factory of Scheduler to return from {@link Schedulers.computation()} or null if default should be used.
29+
* Scheduler to return from {@link Schedulers.computation()} or null if default should be used.
30+
*
31+
* This instance should be or behave like a stateless singleton;
3132
*/
32-
public abstract Func0<Scheduler> getComputationSchedulerFactory();
33+
public abstract Scheduler getComputationScheduler();
3334

3435
/**
35-
* Factory of Scheduler to return from {@link Schedulers.io()} or null if default should be used.
36+
* Scheduler to return from {@link Schedulers.io()} or null if default should be used.
37+
*
38+
* This instance should be or behave like a stateless singleton;
3639
*/
37-
public abstract Func0<Scheduler> getIOSchedulerFactory();
40+
public abstract Scheduler getIOScheduler();
3841

3942
/**
40-
* Factory of Scheduler to return from {@link Schedulers.newThread()} or null if default should be used.
43+
* Scheduler to return from {@link Schedulers.newThread()} or null if default should be used.
44+
*
45+
* This instance should be or behave like a stateless singleton;
4146
*/
42-
public abstract Func0<Scheduler> getNewThreadSchedulerFactory();
47+
public abstract Scheduler getNewThreadScheduler();
4348
}

rxjava-core/src/main/java/rx/plugins/RxJavaDefaultSchedulersDefault.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package rx.plugins;
1717

1818
import rx.Scheduler;
19-
import rx.functions.Func0;
2019

2120
/**
2221
* Default implementation of {@link RxJavaErrorHandler} that does nothing.
@@ -27,20 +26,23 @@ public class RxJavaDefaultSchedulersDefault extends RxJavaDefaultSchedulers {
2726

2827
private static RxJavaDefaultSchedulersDefault INSTANCE = new RxJavaDefaultSchedulersDefault();
2928

30-
public Func0<Scheduler> getComputationSchedulerFactory() {
31-
return null;
29+
public static RxJavaDefaultSchedulers getInstance() {
30+
return INSTANCE;
3231
}
3332

34-
public Func0<Scheduler> getIOSchedulerFactory() {
33+
@Override
34+
public Scheduler getComputationScheduler() {
3535
return null;
3636
}
3737

38-
public Func0<Scheduler> getNewThreadSchedulerFactory() {
38+
@Override
39+
public Scheduler getIOScheduler() {
3940
return null;
4041
}
4142

42-
public static RxJavaDefaultSchedulers getInstance() {
43-
return INSTANCE;
43+
@Override
44+
public Scheduler getNewThreadScheduler() {
45+
return null;
4446
}
4547

4648
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,20 @@
3636
public class ExecutorScheduler extends Scheduler {
3737
private final Executor executor;
3838

39+
/**
40+
* @deprecated Use Schedulers.executor();
41+
* @return
42+
*/
43+
@Deprecated
3944
public ExecutorScheduler(Executor executor) {
4045
this.executor = executor;
4146
}
4247

48+
/**
49+
* @deprecated Use Schedulers.executor();
50+
* @return
51+
*/
52+
@Deprecated
4353
public ExecutorScheduler(ScheduledExecutorService executor) {
4454
this.executor = executor;
4555
}
@@ -50,7 +60,6 @@ public Subscription schedule(Action1<Scheduler.Inner> action) {
5060
inner.schedule(action);
5161
return inner.innerSubscription;
5262
}
53-
5463

5564
@Override
5665
public Subscription schedule(Action1<Inner> action, long delayTime, TimeUnit unit) {

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,19 @@
2828
public final class ImmediateScheduler extends Scheduler {
2929
private static final ImmediateScheduler INSTANCE = new ImmediateScheduler();
3030

31+
/**
32+
* @deprecated Use Schedulers.immediate();
33+
* @return
34+
*/
35+
@Deprecated
3136
public static ImmediateScheduler getInstance() {
3237
return INSTANCE;
3338
}
3439

40+
/* package */static ImmediateScheduler instance() {
41+
return INSTANCE;
42+
}
43+
3544
/* package accessible for unit tests */ImmediateScheduler() {
3645
}
3746

@@ -49,7 +58,6 @@ public Subscription schedule(Action1<Inner> action, long delayTime, TimeUnit uni
4958
return inner.innerSubscription;
5059
}
5160

52-
5361
private class InnerImmediateScheduler extends Scheduler.Inner implements Subscription {
5462

5563
final BooleanSubscription innerSubscription = new BooleanSubscription();

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,16 @@ public Thread newThread(Runnable r) {
4646
}
4747
};
4848

49+
/**
50+
* @deprecated Use Schedulers.newThread();
51+
* @return
52+
*/
4953
@Deprecated
5054
public static NewThreadScheduler getInstance() {
5155
return INSTANCE;
5256
}
53-
54-
/* package */ static NewThreadScheduler instance() {
57+
58+
/* package */static NewThreadScheduler instance() {
5559
return INSTANCE;
5660
}
5761

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

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -23,61 +23,39 @@
2323
import java.util.concurrent.atomic.AtomicLong;
2424

2525
import rx.Scheduler;
26-
import rx.functions.Func0;
2726
import rx.plugins.RxJavaPlugins;
2827

2928
/**
3029
* Static factory methods for creating Schedulers.
3130
*/
3231
public class Schedulers {
3332

34-
private final Func0<Scheduler> computationScheduler;
35-
private final Func0<Scheduler> ioScheduler;
36-
private final Func0<Scheduler> newThreadScheduler;
33+
private final Scheduler computationScheduler;
34+
private final Scheduler ioScheduler;
35+
private final Scheduler newThreadScheduler;
3736

3837
private static final Schedulers INSTANCE = new Schedulers();
3938

4039
private Schedulers() {
41-
Func0<Scheduler> c = RxJavaPlugins.getInstance().getDefaultSchedulers().getComputationSchedulerFactory();
40+
Scheduler c = RxJavaPlugins.getInstance().getDefaultSchedulers().getComputationScheduler();
4241
if (c != null) {
4342
computationScheduler = c;
4443
} else {
45-
computationScheduler = new Func0<Scheduler>() {
46-
47-
@Override
48-
public Scheduler call() {
49-
return executor(createComputationExecutor());
50-
}
51-
52-
};
44+
computationScheduler = executor(createComputationExecutor());
5345
}
5446

55-
Func0<Scheduler> io = RxJavaPlugins.getInstance().getDefaultSchedulers().getIOSchedulerFactory();
47+
Scheduler io = RxJavaPlugins.getInstance().getDefaultSchedulers().getIOScheduler();
5648
if (io != null) {
5749
ioScheduler = io;
5850
} else {
59-
ioScheduler = new Func0<Scheduler>() {
60-
61-
@Override
62-
public Scheduler call() {
63-
return executor(createIOExecutor());
64-
}
65-
66-
};
51+
ioScheduler = executor(createIOExecutor());
6752
}
6853

69-
Func0<Scheduler> nt = RxJavaPlugins.getInstance().getDefaultSchedulers().getNewThreadSchedulerFactory();
54+
Scheduler nt = RxJavaPlugins.getInstance().getDefaultSchedulers().getNewThreadScheduler();
7055
if (nt != null) {
7156
newThreadScheduler = nt;
7257
} else {
73-
newThreadScheduler = new Func0<Scheduler>() {
74-
75-
@Override
76-
public Scheduler call() {
77-
return NewThreadScheduler.instance();
78-
}
79-
80-
};
58+
newThreadScheduler = NewThreadScheduler.instance();
8159
}
8260

8361
}
@@ -88,7 +66,7 @@ public Scheduler call() {
8866
* @return {@link ImmediateScheduler} instance
8967
*/
9068
public static Scheduler immediate() {
91-
return ImmediateScheduler.getInstance();
69+
return ImmediateScheduler.instance();
9270
}
9371

9472
/**
@@ -99,7 +77,7 @@ public static Scheduler immediate() {
9977
*/
10078
@Deprecated
10179
public static Scheduler currentThread() {
102-
return TrampolineScheduler.getInstance();
80+
return TrampolineScheduler.instance();
10381
}
10482

10583
/**
@@ -108,7 +86,7 @@ public static Scheduler currentThread() {
10886
* @return {@link TrampolineScheduler} instance
10987
*/
11088
public static Scheduler trampoline() {
111-
return TrampolineScheduler.getInstance();
89+
return TrampolineScheduler.instance();
11290
}
11391

11492
/**
@@ -117,7 +95,7 @@ public static Scheduler trampoline() {
11795
* @return {@link NewThreadScheduler} instance
11896
*/
11997
public static Scheduler newThread() {
120-
return INSTANCE.newThreadScheduler.call();
98+
return INSTANCE.newThreadScheduler;
12199
}
122100

123101
/**
@@ -167,7 +145,7 @@ public static Scheduler threadPoolForComputation() {
167145
* @return {@link Scheduler} for computation-bound work.
168146
*/
169147
public static Scheduler computation() {
170-
return INSTANCE.computationScheduler.call();
148+
return INSTANCE.computationScheduler;
171149
}
172150

173151
/**
@@ -199,7 +177,7 @@ public static Scheduler threadPoolForIO() {
199177
* @return {@link ExecutorScheduler} for IO-bound work.
200178
*/
201179
public static Scheduler io() {
202-
return INSTANCE.ioScheduler.call();
180+
return INSTANCE.ioScheduler;
203181
}
204182

205183
private static ScheduledExecutorService createComputationExecutor() {

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,18 @@
3030
public class TrampolineScheduler extends Scheduler {
3131
private static final TrampolineScheduler INSTANCE = new TrampolineScheduler();
3232

33+
/**
34+
* @deprecated Use Schedulers.trampoline();
35+
* @return
36+
*/
37+
@Deprecated
3338
public static TrampolineScheduler getInstance() {
3439
return INSTANCE;
3540
}
41+
42+
/* package */ static TrampolineScheduler instance() {
43+
return INSTANCE;
44+
}
3645

3746
@Override
3847
public Subscription schedule(Action1<Scheduler.Inner> action) {

0 commit comments

Comments
 (0)