很明显compareAndSet是原子操作。但是以下两个代码片段呢?
if (value.compareAndSet(true, false)) // No negation
或者像这样:
if (!value.compareAndSet(true, false)) // There is a negation
我认为第一个操作是原子操作(但不完全确定,因为有一个if),第二个操作绝对不是原子操作,因为它包含compareAndSet和一个否定。
答案 0 :(得分:1)
此代码或多或少地编译为
boolean result = value.compareAndSet(true, false)
if (result){
// or
if (!result){
result
是一个局部变量(而且是一个原语)。
其他线程无法接触它而某人会损害它#34;
当然,AtomicBoolean本身在下次查看时可能会有不同的值。但是你仍然会知道你的compareAndSet
是否成功。