让我们说我分拆了几个事件订阅,如下:
event.subscribe((eventObj) -> {
// do stuff
});
event2.subscribe((eventObj) -> {
// do more stuff
});
这隐含地创建了两个线程吗?
答案 0 :(得分:1)
默认情况下,RX Java没有为Subscriptions创建新线程,请查看Scheduler文档以了解多线程行为。
答案 1 :(得分:1)
订阅行为本身并不会在另一个线程上开始计算,而是Observable本身的定义决定了线程行为。
作为一个例子
Observable
.just(1, 2, 4)
.doOnNext(System.out::println)
.subscribe();
将同步运行。
您可以使用subscribeOn
或observeOn
在其他线程上引入计算,但请注意,某些Observable源和运算符的默认值意味着它们将在另一个线程上运行,而不是发生订阅的线程。一个例子是Observable.interval(1, TimeUnit.SECONDS)
,它每秒发出一个递增的整数。此Observable的默认调度程序为Schedulers.computation
。当订阅发生时,从与Schedulers.computation
关联的线程池中选择一个线程,并在该线程上发生排放。每个运算符的javadoc都会提到线程行为(可能就Scheduler
而言),所以请检查一下你是否不确定。