java - AtomicBoolean.set(flag) 和 AtomicBoolean.compareAndSet(!flag, flag) 有什么区别?

标签 java java.util.concurrent compare-and-swap

我想知道调用之间是否有任何区别(或可能的副作用):

AtomicBoolean.set(true)

AtomicBoolean.compareAndset(false, true)

AtomicBoolean#set 的 JavaDoc 指出:

Unconditionally sets to the given value.

虽然 AtomicBoolean#compareAndSet 声明:

Atomically sets the value to the given updated value if the current value == the expected value.

在这两种情况下,该值都将设置为 true。那有什么区别呢?

最佳答案

compareAndset(false, true) 将返回 false 如果值已经是 true
它实际上等同于 !getAndSet(true)

关于java - AtomicBoolean.set(flag) 和 AtomicBoolean.compareAndSet(!flag, flag) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13363752/

相关文章:

java - 由于 cookie-config,Weblogic 中的 web.xml 验证抛出错误

java.util.concurrent.CompletionStage - 如何处理异常?

java - ConcurrentMap.compute 用作删除

java - 原子引用用法

java - 从最高到最低的顺序和位置从另一个 arraylist java 更改

java - 当在mysql数据库的日期时间列中插入日期和时间时,它将插入日期,但时间是00-00-00

java - 为什么我无法使 setSelectedIndex 工作?

java - 如果我在 for 循环之后添加球,为什么球不会出现在框架中?

java - 并发HashMap的片段,用于检索对象或创建对象(如果不存在)(作为原子操作)

java - 如何证明 i++ 不是原子的