Is the incrementAndGet method of the following AtomicBigInteger implementation an atomic operation?
I'm particularly wondering about the for (; ; ) part. Does the JVM somehow guarantee that each cycle in a for loop is executed atomicly?
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;
            }
        }
    }
}
I got this code from here: Possible to safely increment BigInteger in a thread safe way, perhaps with AtomicReference, w/o locking? However this implementation was making its rounds and you can find it on many different places across the internet.
 
     
     
    