显然,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是否成功。

07-27 23:24