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
是否成功。
很明显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
是否成功。