AtomicInteger 的 getAndIncrement 实现执行以下操作:
public final int getAndIncrement() {
for (;;) {
int current = get(); // Step 1 , get returns the volatile variable
int next = current + 1;
if (compareAndSet(current, next))
return current;
} }
它不是aVolatileVariable++的等价物吗?(我们知道这不是正确的用法)。如果没有同步,我们如何确保这个完整的操作是原子的?如果在步骤 1 中读取变量“current”后 volatile 变量的值发生了变化怎么办?