默认情况下,运算符不能在任何特定的调度程序上运行,这意味着什么

时间:2018-04-03 14:59:33

标签: rx-java

默认情况下,运营商不在任何特定的计划程序上运行是什么意思?

示例:CombineLatest

  

RxJava将此运算符实现为combineLatest。可能需要2到9个Observable(以及组合函数)作为参数,或单个Observable列表(以及组合函数)。默认情况下,它不会在任何特定的调度程序上运行。

2 个答案:

答案 0 :(得分:1)

运算符在不执行线程管理操作时不需要特定的调度程序。

这并不意味着代码不是线程安全的。线程安全是通过使用范围包含,堆栈变量,volatile值和Atomic变量来实现的,只需最少使用synchronized子句。

线程管理更复杂,意味着在线程之间移动操作或数据。在此类运算符的代码中,您将看到它们创建RunnableTimerTask s,这需要了解调度程序。

答案 1 :(得分:0)

这意味着运营商遵循Scheduler文档中所述的指南 -

  

默认情况下,Observable和应用于它的运算符链将完成其工作,并将在调用其Subscribe方法的同一线程上通知其观察者。

它所做的一切都将发生在调用订阅的线程上。大多数操作员都这样工作。有些人无法在同一个线程上执行他们的工作(如sample),因此需要第二个线程来执行工作。这些运算符通常具有他们用于工作的默认Scheduler,以及接受Scheduler作为参数的版本,以便您选择第二个线程可以在哪里工作。