【发布时间】:2013-11-14 22:02:36
【问题描述】:
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 变量的值发生了变化怎么办?
【问题讨论】:
标签: java synchronization atomic volatile