Skip to content

Commit a429815

Browse files
JakeWhartonakarnokd
authored andcommitted
Provide factories for creating the default scheduler instances. (#3856)
1 parent 54c6ed2 commit a429815

File tree

5 files changed

+81
-24
lines changed

5 files changed

+81
-24
lines changed

src/main/java/rx/schedulers/CachedThreadScheduler.java renamed to src/main/java/rx/internal/schedulers/CachedThreadScheduler.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,17 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package rx.schedulers;
16+
package rx.internal.schedulers;
1717

1818
import java.util.concurrent.*;
1919
import java.util.concurrent.atomic.*;
2020

2121
import rx.*;
2222
import rx.functions.Action0;
23-
import rx.internal.schedulers.*;
2423
import rx.internal.util.RxThreadFactory;
2524
import rx.subscriptions.*;
2625

27-
/* package */final class CachedThreadScheduler extends Scheduler implements SchedulerLifecycle {
26+
public final class CachedThreadScheduler extends Scheduler implements SchedulerLifecycle {
2827
private static final String WORKER_THREAD_NAME_PREFIX = "RxCachedThreadScheduler-";
2928
static final RxThreadFactory WORKER_THREAD_FACTORY =
3029
new RxThreadFactory(WORKER_THREAD_NAME_PREFIX);
@@ -234,4 +233,4 @@ public void setExpirationTime(long expirationTime) {
234233
this.expirationTime = expirationTime;
235234
}
236235
}
237-
}
236+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* Copyright 2014 Netflix, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package rx.internal.schedulers;
17+
18+
import rx.Scheduler;
19+
import rx.internal.util.RxThreadFactory;
20+
21+
/**
22+
* Schedules work on a new thread.
23+
*/
24+
public final class NewThreadScheduler extends Scheduler {
25+
26+
private static final String THREAD_NAME_PREFIX = "RxNewThreadScheduler-";
27+
private static final RxThreadFactory THREAD_FACTORY = new RxThreadFactory(THREAD_NAME_PREFIX);
28+
29+
public NewThreadScheduler() {
30+
}
31+
32+
@Override
33+
public Worker createWorker() {
34+
return new NewThreadWorker(THREAD_FACTORY);
35+
}
36+
}

src/main/java/rx/plugins/RxJavaSchedulersHook.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@
1717
package rx.plugins;
1818

1919
import rx.Scheduler;
20+
import rx.annotations.Experimental;
2021
import rx.functions.Action0;
22+
import rx.internal.schedulers.CachedThreadScheduler;
23+
import rx.internal.schedulers.EventLoopsScheduler;
24+
import rx.internal.schedulers.NewThreadScheduler;
25+
import rx.schedulers.Schedulers;
2126

2227
/**
2328
* This plugin class provides 2 ways to customize {@link Scheduler} functionality
@@ -35,6 +40,30 @@
3540
*/
3641
public class RxJavaSchedulersHook {
3742

43+
/**
44+
* Create an instance of the default {@link Scheduler} used for {@link Schedulers#computation()}.
45+
*/
46+
@Experimental
47+
public static Scheduler createComputationScheduler() {
48+
return new EventLoopsScheduler();
49+
}
50+
51+
/**
52+
* Create an instance of the default {@link Scheduler} used for {@link Schedulers#io()}.
53+
*/
54+
@Experimental
55+
public static Scheduler createIoScheduler() {
56+
return new CachedThreadScheduler();
57+
}
58+
59+
/**
60+
* Create an instance of the default {@link Scheduler} used for {@link Schedulers#newThread()}.
61+
*/
62+
@Experimental
63+
public static Scheduler createNewThreadScheduler() {
64+
return new NewThreadScheduler();
65+
}
66+
3867
protected RxJavaSchedulersHook() {
3968

4069
}

src/main/java/rx/schedulers/NewThreadScheduler.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,18 @@
1616
package rx.schedulers;
1717

1818
import rx.Scheduler;
19-
import rx.internal.schedulers.NewThreadWorker;
20-
import rx.internal.util.RxThreadFactory;
2119

2220
/**
23-
* Schedules work on a new thread.
21+
* @deprecated This type was never publicly instantiable. Use {@link Schedulers#newThread()}.
2422
*/
23+
@Deprecated
2524
public final class NewThreadScheduler extends Scheduler {
26-
27-
private static final String THREAD_NAME_PREFIX = "RxNewThreadScheduler-";
28-
private static final RxThreadFactory THREAD_FACTORY = new RxThreadFactory(THREAD_NAME_PREFIX);
29-
private static final NewThreadScheduler INSTANCE = new NewThreadScheduler();
30-
31-
/* package */static NewThreadScheduler instance() {
32-
return INSTANCE;
33-
}
34-
3525
private NewThreadScheduler() {
36-
26+
throw new AssertionError();
3727
}
3828

3929
@Override
4030
public Worker createWorker() {
41-
return new NewThreadWorker(THREAD_FACTORY);
31+
return null;
4232
}
4333
}

src/main/java/rx/schedulers/Schedulers.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import rx.internal.schedulers.*;
2020
import rx.internal.util.RxRingBuffer;
2121
import rx.plugins.RxJavaPlugins;
22+
import rx.plugins.RxJavaSchedulersHook;
2223

2324
import java.util.concurrent.Executor;
2425

@@ -34,25 +35,27 @@ public final class Schedulers {
3435
private static final Schedulers INSTANCE = new Schedulers();
3536

3637
private Schedulers() {
37-
Scheduler c = RxJavaPlugins.getInstance().getSchedulersHook().getComputationScheduler();
38+
RxJavaSchedulersHook hook = RxJavaPlugins.getInstance().getSchedulersHook();
39+
40+
Scheduler c = hook.getComputationScheduler();
3841
if (c != null) {
3942
computationScheduler = c;
4043
} else {
41-
computationScheduler = new EventLoopsScheduler();
44+
computationScheduler = RxJavaSchedulersHook.createComputationScheduler();
4245
}
4346

44-
Scheduler io = RxJavaPlugins.getInstance().getSchedulersHook().getIOScheduler();
47+
Scheduler io = hook.getIOScheduler();
4548
if (io != null) {
4649
ioScheduler = io;
4750
} else {
48-
ioScheduler = new CachedThreadScheduler();
51+
ioScheduler = RxJavaSchedulersHook.createIoScheduler();
4952
}
5053

51-
Scheduler nt = RxJavaPlugins.getInstance().getSchedulersHook().getNewThreadScheduler();
54+
Scheduler nt = hook.getNewThreadScheduler();
5255
if (nt != null) {
5356
newThreadScheduler = nt;
5457
} else {
55-
newThreadScheduler = NewThreadScheduler.instance();
58+
newThreadScheduler = RxJavaSchedulersHook.createNewThreadScheduler();
5659
}
5760
}
5861

0 commit comments

Comments
 (0)