我正在查看类中addAndGet
方法的 Java(Java 6) 源代码AtomicInteger
。
对应的代码如下:
public final int addAndGet(int delta) {
for (;;) {
int current = get();
int next = current + delta;
if (compareAndSet(current, next))
return next;
}
}
compareAndSet 方法调用本地方法来执行分配。主要有两个问题:
- 无限循环有什么帮助?
- 在什么情况下,“if (compareAndSet(current, next))”条件可能返回 false ?在这种情况下,代码可能会陷入无限循环。如果保证 compareAndSet 总是返回一个“真”,那么我们可以不完全取消这个检查吗?
decrementAndGet
, getAndDecrement
,getAndAdd
方法也有类似的疑问。