【发布时间】:2016-09-14 17:22:09
【问题描述】:
我想知道在 Subject 上调用 subscribeOn() 会有什么后果。
我知道(默认情况下)这不会改变发出的线程项目,我只是好奇它是否会导致其他一些负面影响。
一般来说,从不同线程调用 subscribe() 到同一个 Observable 是不安全的吗?如果是,那么 subscribeOn() 是否以某种方式使其安全?
【问题讨论】:
我想知道在 Subject 上调用 subscribeOn() 会有什么后果。
我知道(默认情况下)这不会改变发出的线程项目,我只是好奇它是否会导致其他一些负面影响。
一般来说,从不同线程调用 subscribe() 到同一个 Observable 是不安全的吗?如果是,那么 subscribeOn() 是否以某种方式使其安全?
【问题讨论】:
在同一个Subject 上从不同的线程调用subscribe() 是安全的(注意从不同的线程调用subject.doOnXXX 需要同步,如果需要请要求说明)。将其推广到所有 Observable 是不可能的,因为构造一个不是线程安全的(比如可见性问题)很容易。你是对的,你可能通过使用
.subscribeOn(Schedulers.from(Executors.newSingleThreadExecutor()))
使用具有多个线程的调度程序不会在线程安全方面保护您。
【讨论】: