RxJava是多线程的吗?

时间:2016-10-07 21:11:45

标签: java rx-java

让我们说我分拆了几个事件订阅,如下:

event.subscribe((eventObj) -> {
            // do stuff
        });

event2.subscribe((eventObj) -> {
            // do more stuff
        });

这隐含地创建了两个线程吗?

2 个答案:

答案 0 :(得分:1)

默认情况下,RX Java没有为Subscriptions创建新线程,请查看Scheduler文档以了解多线程行为。

答案 1 :(得分:1)

订阅行为本身并不会在另一个线程上开始计算,而是Observable本身的定义决定了线程行为。

作为一个例子

Observable
  .just(1, 2, 4)
  .doOnNext(System.out::println)
  .subscribe();

将同步运行。

您可以使用subscribeOnobserveOn在其他线程上引入计算,但请注意,某些Observable源和运算符的默认值意味着它们将在另一个线程上运行,而不是发生订阅的线程。一个例子是Observable.interval(1, TimeUnit.SECONDS),它每秒发出一个递增的整数。此Observable的默认调度程序为Schedulers.computation。当订阅发生时,从与Schedulers.computation关联的线程池中选择一个线程,并在该线程上发生排放。每个运算符的javadoc都会提到线程行为(可能就Scheduler而言),所以请检查一下你是否不确定。