Skip to content

Commit 07ce114

Browse files
Scheduler instances should be or behave like singletons
- remove the Func0 factory signature for Scheduler creation.
1 parent 084ac6f commit 07ce114

File tree

3 files changed

+33
-48
lines changed

3 files changed

+33
-48
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/Schedulers.java

Lines changed: 12 additions & 34 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
}
@@ -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() {

0 commit comments

Comments
 (0)