我一直在研究 Java API java.util.concurrent.atomic,尤其是AtomicInteger类。
方法注释说这些方法是原子的。
以getAndIncrement()为例:
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
正如它所记录的那样,它是“以原子方式将当前值增加一”。
究竟是什么让这个方法成为原子的?据我所知,它完全是“非原子的”——在其执行过程中以及在语句执行期间涉及许多周期
int next = current + 1;
例如,next的值可以由另一个线程设置。