我希望使用RxJava代替我的单线程ExecutorService
:
private ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(/* ... */);
我想知道使用RxJava的等效设置是什么? 到目前为止我尝试了什么:
private Subject<MyClass> subject = PublishSubject.create()
subject.toFlowable(MISSING)
.observeOn(Schedulers.single())
.subscribeOn(Schedulers.single())
.subscribe(obj -> {
// handle on next
});
这相当于我上面的ExecutorService
设置或不同吗?我是否使用Schedulers.single()
获得了新的单线程执行程序?
答案 0 :(得分:1)
取决于ExecutorService
的生命周期。如果它是应用程序范围并且与其整个生命周期相关联,则Schedulers.single()
等同于它。
如果你有几个单线程ExecutorService
实例,并希望你的流程阶段在不同但特定的线程上处理,那么没有。你有两个选择:
1)如果唯一的要求是在不同的线程上,但可以在每个独立用户上进行更改,则可以使用io()
或computation()
2)如果您想为每个独立订阅者线程限制阶段,您可以对Schedulers.from(Executor)
使用多个ExecutorService
或使用RxJavaPlugins.createNewSingleScheduler(ThreadFactory)
。如果您有机会依赖内部组件,您也可以new SingleScheduler()
。