lry
V2EX  ›  Java

请教一个 AtomicBoolean 与 volatile 的问题

  •  
  •   lry · Jan 25, 2021 · 2830 views
    This topic created in 1947 days ago, the information mentioned may be changed or developed.

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

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

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

    另外 volatile AtomicBooleanAtomicBoolean 会有区别吗

    6 replies    2021-01-25 21:50:11 +08:00
    palmers
        1
    palmers  
       Jan 25, 2021
    `volatile AtomicBoolean ` 这种用法是不对的 我认为冗余了 AtomicBoolean 内部值已经是 volatile 了 另外 这个是不是应该 `volatile bool `和`AtomicBoolean bool` 的区别的问题?
    mightofcode
        2
    mightofcode  
       Jan 25, 2021
    这两个除了都属于并发编程之外,没有一点关系
    0x666666
        3
    0x666666  
       Jan 25, 2021
    @palmers #1 同意你的说话,Atomic 本身的 state 已经用了 volatile,外面再使用 volatile 修饰 Atomic 没有太大的必要。
    chendy
        4
    chendy  
       Jan 25, 2021   ❤️ 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 确保程序执行顺序,能保证变量之间的不被重排序。
    mightofcode
        5
    mightofcode  
       Jan 25, 2021
    “另外 volatile AtomicBoolean 和 AtomicBoolean 会有区别吗”

    volatile 跟 AtomicBoolean 没有丝毫关系,这个问题就没有意义
    SoloCompany
        6
    SoloCompany  
       Jan 25, 2021
    你应该使用 final 而不是 volatile
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5347 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 08:01 · PVG 16:01 · LAX 01:01 · JFK 04:01
    ♥ Do have faith in what you're doing.