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回答
-
是的,没错,下一次执行的时候,获取到的是最新的值。
是的,每个线程的AtomicInteger的值,是对应主内存中的AtomicInteger的拷贝。
112020-02-04