小编典典

AtomicInteger的getAndIncrement实现

java

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


阅读 441

收藏
2020-11-26

共1个答案

小编典典

“秘密调味料”在此调用中:

compareAndSet(current, next)

如果在读取
同时更改了原始易失性值,则该compareAndSet操作将失败(并返回false),从而迫使代码继续循环。
__

2020-11-26