【发布时间】:2021-12-20 10:38:21
【问题描述】:
下面AtomicBigInteger实现的incrementAndGet方法是不是原子操作?
我特别想知道for (; ; ) 部分。 JVM 是否以某种方式保证 for 循环中的每个循环都是原子执行的?
public final class AtomicBigInteger {
private final AtomicReference<BigInteger> valueHolder = new AtomicReference<>();
public AtomicBigInteger(BigInteger bigInteger) {
valueHolder.set(bigInteger);
}
public BigInteger incrementAndGet() {
for (; ; ) {
BigInteger current = valueHolder.get();
BigInteger next = current.add(BigInteger.ONE);
if (valueHolder.compareAndSet(current, next)) {
return next;
}
}
}
}
我从这里得到这个代码: Possible to safely increment BigInteger in a thread safe way, perhaps with AtomicReference, w/o locking? 但是,此实现正在流行,您可以在互联网上的许多不同地方找到它。
【问题讨论】:
-
你应该链接到这段代码的源代码。
标签: java atomic atomicinteger