compareAndSet 在 if 语句中。是原子操作吗?

compareAndSet in an if statement. Is it an atomic operation?

很明显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是一个局部变量(而且还是一个原语)。

其他线程无法访问它和某人 "corrupt it"。

当然,AtomicBoolean 本身可能在您下次查看时具有不同的值。但是您仍然会知道您的 compareAndSet 是否成功。