下面这个方法,我不理解
public final int getAndIncrement() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next)) return current; } }
为何要循环直到成功?如果这期间有另外的线程更改了value,导致compareAndSet()返回false,那这就表面已经不是原子性了吧,还继续重复有啥意义?
认证0级讲师
書き込み操作が上書きされず、マルチスレッドで計算エラーが発生しないことを実現したいだけです。アトミック性を最大限に実現したい場合は、ロックを使用するしかありませんが、これは非効率です。 。
書き込み操作が上書きされず、マルチスレッドで計算エラーが発生しないことを実現したいだけです。アトミック性を最大限に実現したい場合は、ロックを使用するしかありませんが、これは非効率です。 。