将 subscribeOn() 与主题一起使用
Using subscribeOn() with a Subject
我想知道在 Subject 上调用 subscribeOn() 会产生什么后果。
我知道(默认情况下)这不会改变发射的线程项目,我只是好奇它是否会导致其他一些负面影响。
一般来说,从不同线程调用同一个Observable的subscribe()是不安全的吗?如果是,subscribeOn() 是否以某种方式使它安全?
在同一个Subject
上从不同的线程调用subscribe()
是安全的(注意从不同的线程调用subject.doOnXXX
需要同步,如有需要请说明)。将其推广到所有 Observables 是不可能的,因为构造一个非线程安全的 Observables 很容易(比如存在可见性问题)。您是对的,因为您 可能 通过使用
使非线程安全的 Observable 线程安全
.subscribeOn(Schedulers.from(Executors.newSingleThreadExecutor()))
使用具有多个线程的调度程序不会在线程安全方面保护您。
我想知道在 Subject 上调用 subscribeOn() 会产生什么后果。
我知道(默认情况下)这不会改变发射的线程项目,我只是好奇它是否会导致其他一些负面影响。
一般来说,从不同线程调用同一个Observable的subscribe()是不安全的吗?如果是,subscribeOn() 是否以某种方式使它安全?
在同一个Subject
上从不同的线程调用subscribe()
是安全的(注意从不同的线程调用subject.doOnXXX
需要同步,如有需要请说明)。将其推广到所有 Observables 是不可能的,因为构造一个非线程安全的 Observables 很容易(比如存在可见性问题)。您是对的,因为您 可能 通过使用
.subscribeOn(Schedulers.from(Executors.newSingleThreadExecutor()))
使用具有多个线程的调度程序不会在线程安全方面保护您。