【发布时间】:2013-07-17 05:43:26
【问题描述】:
我正在查看AtomicInteger 类中addAndGet 方法的Java(Java 6) 源代码。
对应的代码如下:
public final int addAndGet(int delta) {
for (;;) {
int current = get();
int next = current + delta;
if (compareAndSet(current, next))
return next;
}
}
compareAndSet 方法调用本地方法来执行赋值。 主要有两个问题:
- 无限循环有何帮助?
- 可能的情况是什么,在这种情况下,“如果 (compareAndSet(current, next))" 条件可能返回 false ? 在这种情况下,代码可能会陷入无限循环。如果是 保证 compareAndSet 将始终返回“true”,然后可以 我们不会完全取消这项检查吗?
decrementAndGet、getAndDecrement、getAndAdd 方法也有类似的疑问。
【问题讨论】:
标签: java synchronization atomic java-6