请教一个 AtomicBoolean 与 volatile 的问题

2021-01-25 17:14:11 +08:00
 lry

AtomicBoolean 的读方法有四种 get()getPlain()getOpaque()getAcquire() 对应的写方法也有 set()setPlain()setOpaque()setRelease()

看了文档也比较迷惑,例如 with memory semantics of reading 这句英文没懂是什么意思

这些方法区别是什么呢 ==

另外 volatile AtomicBooleanAtomicBoolean 会有区别吗

2124 次点击
所在节点    Java
6 条回复
palmers
2021-01-25 17:46:44 +08:00
`volatile AtomicBoolean ` 这种用法是不对的 我认为冗余了 AtomicBoolean 内部值已经是 volatile 了 另外 这个是不是应该 `volatile bool `和`AtomicBoolean bool` 的区别的问题?
mightofcode
2021-01-25 18:02:04 +08:00
这两个除了都属于并发编程之外,没有一点关系
0x666666
2021-01-25 18:13:11 +08:00
@palmers #1 同意你的说话,Atomic 本身的 state 已经用了 volatile,外面再使用 volatile 修饰 Atomic 没有太大的必要。
chendy
2021-01-25 18:32:07 +08:00
搜到了一个这: https://xie.infoq.cn/article/b6e6986aa7afa4d8278ff6f63

普通变量是不确保内存可见的,opaque 、release/acquire 、volatile 是可以保证内存可见的

opaque 确保程序执行顺序,但不保证其它线程的可见顺序

release/acquire 保证程序执行顺序,setRelease 确保前面的 load 和 store 不会被重排序到后面,但不确保后面的 load 和 store 重排序到前面; getAcquire 确保后面的 load 和 store 不会被重排序到前面,但不确保前面的 load 和 store 被重排序。

volatile 确保程序执行顺序,能保证变量之间的不被重排序。
mightofcode
2021-01-25 18:34:04 +08:00
“另外 volatile AtomicBoolean 和 AtomicBoolean 会有区别吗”

volatile 跟 AtomicBoolean 没有丝毫关系,这个问题就没有意义
SoloCompany
2021-01-25 21:50:11 +08:00
你应该使用 final 而不是 volatile

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX