AtomicBoolean
的读方法有四种 get()
、getPlain()
、getOpaque()
、getAcquire()
对应的写方法也有 set()
、setPlain()
、setOpaque()
、setRelease()
看了文档也比较迷惑,例如 with memory semantics of reading
这句英文没懂是什么意思
这些方法区别是什么呢 ==
另外 volatile AtomicBoolean
和 AtomicBoolean
会有区别吗
1
palmers 2021-01-25 17:46:44 +08:00
`volatile AtomicBoolean ` 这种用法是不对的 我认为冗余了 AtomicBoolean 内部值已经是 volatile 了 另外 这个是不是应该 `volatile bool `和`AtomicBoolean bool` 的区别的问题?
|
2
mightofcode 2021-01-25 18:02:04 +08:00
这两个除了都属于并发编程之外,没有一点关系
|
3
0x666666 2021-01-25 18:13:11 +08:00
@palmers #1 同意你的说话,Atomic 本身的 state 已经用了 volatile,外面再使用 volatile 修饰 Atomic 没有太大的必要。
|
4
chendy 2021-01-25 18:32:07 +08:00 1
搜到了一个这: https://xie.infoq.cn/article/b6e6986aa7afa4d8278ff6f63
普通变量是不确保内存可见的,opaque 、release/acquire 、volatile 是可以保证内存可见的 opaque 确保程序执行顺序,但不保证其它线程的可见顺序 release/acquire 保证程序执行顺序,setRelease 确保前面的 load 和 store 不会被重排序到后面,但不确保后面的 load 和 store 重排序到前面; getAcquire 确保后面的 load 和 store 不会被重排序到前面,但不确保前面的 load 和 store 被重排序。 volatile 确保程序执行顺序,能保证变量之间的不被重排序。 |
5
mightofcode 2021-01-25 18:34:04 +08:00
“另外 volatile AtomicBoolean 和 AtomicBoolean 会有区别吗”
volatile 跟 AtomicBoolean 没有丝毫关系,这个问题就没有意义 |
6
SoloCompany 2021-01-25 21:50:11 +08:00
你应该使用 final 而不是 volatile
|