cari

Rumah  >  Soal Jawab  >  teks badan

java - 如何理解AtomicInteger里的CAS操作?

下面这个方法,我不理解

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

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

PHP中文网PHP中文网2807 hari yang lalu689

membalas semua(1)saya akan balas

  • ringa_lee

    ringa_lee2017-04-18 10:51:42

    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.

    balas
    0
  • Batalbalas