public int incrementAndGet(AtomicInteger var) {
int prev, next;
do {
prev = var.get();
next = prev + 1;
} while ( ! var.compareAndSet(prev, next));//这里只是将var的值更新为next,而prev的值没有变
return prev;//这里返回的是之前的值,并不是新值
}
Java 13源码里面是这样的:
public final int incrementAndGet() {
return U.getAndAddInt(this, VALUE, 1) + 1; //这里返回值加了1
}
@HotSpotIntrinsicCandidatepublic final int getAndAddInt(Object o, long offset, int delta) {
int v;
do {
v = getIntVolatile(o, offset);
} while (!weakCompareAndSetInt(o, offset, v, v + delta));
return v;
}
浪过扬帆
incrementAndGet()方法的作用是加1后返回新值,但是
Java 13源码里面是这样的:
getAndAddInt()方法作用是差不多的,但是调用它的incrementAndGet()方法最后返回值加了1,所以您的incrementAndGet()方法是不是应该返回next才对