很明显compareAndSet是一个原子操作。但是下面的两个代码片段又如何呢?
if (value.compareAndSet(true, false)) // No negation
或者像这样:
if (!value.compareAndSet(true, false)) // There is a negation
我认为第一个操作是原子操作(但不太确定,因为有一个 if),第二个操作绝对不是原子操作,因为它由compareAndSet 和一个否定组成。
最佳答案
这段代码或多或少会编译为
boolean result = value.compareAndSet(true, false)
if (result){
// or
if (!result){
那个结果
是一个局部变量(而且还是一个原语)。
其他线程无法访问它并且有人“破坏它”。
当然,下次您查看 AtomicBoolean 本身时可能会具有不同的值。但您仍然会知道 compareAndSet
是否成功。
关于java - if 语句中的compareAndSet。它是原子操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35597591/