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

下面这个方法,我不理解

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

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

PHP中文网
PHP中文网

认证0级讲师

membalas semua(1)
左手右手慢动作

Ia hanya mahu menyedari bahawa operasi tulis tidak akan ditimpa, dan tidak akan ada ralat pengiraan dalam berbilang benang Jika anda ingin mencapai atomicity sebanyak yang anda mahu, anda hanya boleh menggunakan kunci, tetapi ini akan menjadi tidak cekap.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan