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

时间:2016-02-24 09:03:46

标签: java multithreading atomic

很明显compareAndSet是原子操作。但是以下两个代码片段呢?

if (value.compareAndSet(true, false)) // No negation

或者像这样:

if (!value.compareAndSet(true, false)) // There is a negation

我认为第一个操作是原子操作(但不完全确定,因为有一个if),第二个操作绝对不是原子操作,因为它包含compareAndSet和一个否定。

1 个答案:

答案 0 :(得分:1)

此代码或多或少地编译为

boolean result = value.compareAndSet(true, false)
if (result){
// or
if (!result){

result是一个局部变量(而且是一个原语)。

其他线程无法接触它而某人会损害它#34;

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