AtomicInteger的getAndIncrement实现

时间:2013-11-04 09:50:08

标签: java synchronization atomic volatile

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变量的值发生了变化怎么办?

1 个答案:

答案 0 :(得分:3)

这个电话中有“秘密酱”:

compareAndSet(current, next)

{<3}}操作将失败(并返回false)如果原始易失性值在读取后同时更改,则强制代码继续循环。