原子积分递增
如果 AtomicInteger
达到并递增,会发生什么情况?Integer.MAX_VALUE
该值是否返回零?
由于整数溢出,它环绕到:Integer.MIN_VALUE
System.out.println(new AtomicInteger(Integer.MAX_VALUE).incrementAndGet());
System.out.println(Integer.MIN_VALUE);
输出:
-2147483648
-2147483648
在源代码中,它们只有一个
private volatile int value;
和,和不同的地方,他们从中增加或减少,例如
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
因此,它应该遵循标准的Java整数数学,并绕行到Integer.MIN_VALUE。JavaDocs for AtomicInteger对这个问题保持沉默(从我所看到的),所以我想这种行为将来可能会改变,但这似乎极不可能。
如果有一个AtomicLong,如果这会有所帮助的话。