>  Q&A  >  본문

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中文网2744일 전641

모든 응답(1)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-18 10:51:42

    쓰기 작업이 덮어쓰여지지 않고 멀티스레딩에서 계산 오류가 발생하지 않는다는 점만 알고 싶을 뿐입니다. 원하는 만큼 원자성을 달성하려면 잠금만 사용할 수 있지만 이렇게 하면 됩니다. 비효율적이다.

    회신하다
    0
  • 취소회신하다