1
shyling 2021-11-29 18:33:25 +08:00
下面的例子举的不对。。。
他的意思应该是让最好用 scan 累加结果,而不是用外部的 adder 。。。但这个例子跑起来也没问题。 |
2
shyling 2021-11-29 18:34:34 +08:00
如果 adder 不线程安全,结果也是对的。onNext 是顺序调用的
|
3
fanck0605 OP |
4
fanck0605 OP 我编写了这样的一段代码,虽然不加 volatile 结果是正确的,但是我仍然不确定 volatile 是否是必要的
![oQJzh6.md.png]( https://z3.ax1x.com/2021/11/29/oQJzh6.md.png) |
5
chihiro2014 2021-11-30 10:07:51 +08:00
如果变量是全局的,那就需要加 volatile 。局部就不需要 @fanck0605
|
6
fanck0605 OP 看了一下 JVM 的 happens-before 规则,onNext 前后好像都有内存屏障,毕竟一定用了锁或者 volatile 变量操作,所以 onNext 内访问的变量,无需加 volatile ,一定安全的。
|
7
aboutlonger 2021-12-05 22:05:01 +08:00
我猜这个契约是要开发者去遵守的,不是 rxjava 作出的保证。
即使这个资源只会被一个 Observer 访问,也是需要考虑线程安全的,因为一个 Observable 的 Scheduler 可以是一个线程池。 |