AtomicInteger 中的“Compare And Set”是如何工作的
2022-09-01 11:57:55
AtomicInteger
使用两个概念:CAS和变量。volatile
使用变量可确保当前值对所有线程都可见,并且不会被缓存。volatile
但是我对CAS(比较和集合)概念感到困惑,下面解释如下:
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
我的问题是,什么回报?该值不会更新吗?在这种情况下,当线程执行以下情况时会发生什么:if(compareAndSet(current, next)
false
private AtomicInteger count = new AtomicInteger();
count.incrementAndGet();