RxJava中单线程ExecutorService的等价物是什么?

时间:2017-02-22 14:52:41

标签: java concurrency executorservice rx-java2

我希望使用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()获得了新的单线程执行程序?

1 个答案:

答案 0 :(得分:1)

取决于ExecutorService的生命周期。如果它是应用程序范围并且与其整个生命周期相关联,则Schedulers.single()等同于它。

如果你有几个单线程ExecutorService实例,并希望你的流程阶段在不同但特定的线程上处理,那么没有。你有两个选择:

1)如果唯一的要求是在不同的线程上,但可以在每个独立用户上进行更改,则可以使用io()computation()

2)如果您想为每个独立订阅者线程限制阶段,您可以对Schedulers.from(Executor)使用多个ExecutorService或使用RxJavaPlugins.createNewSingleScheduler(ThreadFactory)。如果您有机会依赖内部组件,您也可以new SingleScheduler()