java - 如何理解AtomicInteger里的CAS操作?
PHP中文网
PHP中文网 2017-04-18 10:49:42
0
1
674

下面这个方法,我不理解

public final int getAndIncrement() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return current;
    }
}

为何要循环直到成功?如果这期间有另外的线程更改了value,导致compareAndSet()返回false,那这就表面已经不是原子性了吧,还继续重复有啥意义?

PHP中文网
PHP中文网

认证0级讲师

全員に返信(1)
左手右手慢动作

書き込み操作が上書きされず、マルチスレッドで計算エラーが発生しないことを実現したいだけです。アトミック性を最大限に実現したい場合は、ロックを使用するしかありませんが、これは非効率です。 。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート