显然,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){
该
result
是局部变量(而且是原始变量)。其他线程无法访问它,而有人会“破坏它”。
当然,下次查看时,AtomicBoolean本身可能具有不同的值。但是您仍然会知道
compareAndSet
是否成功。