AtomicInteger中的getAndAddInt源码分析

来源:13-1 从最简单的缓存出发

6095289

2020-02-03

//sun.misc.Unsafe#getAndAddInt
    public final int getAndAddInt(Object var1, long var2, int var4) {
        int var5;
        do {
            var5 = this.getIntVolatile(var1, var2);
        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
        return var5;
    }

悟空老师,在AtomicInteger里面的getAndAddInt方法中,如果当前线程执行this.compareAndSwapInt(var1, var2, var5, var5 + var4)的时候执行失败,那么下一次执行这个方法的时候这个Object var1里面的这个值也会对应的更新为主内存里面的值,不这样感觉永远会执行失败,我说的对吗?
还有一个问题就是每个线程的AtomicInteger是对应主内存中的AtomicInteger的拷贝吗?

写回答

1回答

悟空

2020-02-04

是的,没错,下一次执行的时候,获取到的是最新的值。

是的,每个线程的AtomicInteger的值,是对应主内存中的AtomicInteger的拷贝。

1
1
6095289
非常感谢!
2020-02-04
共1条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程