此代码中出于什么目的使用了循环

public final int getAndSet(int newValue) {
    for (;;) {
        int current = get();
        if (compareAndSet(current, newValue))
            return current;
    }
}

最佳答案

AtomicXXX类表示原子数据类型。这意味着当两个或多个线程同时访问它们时,它们必须返回一致的结果。 compareAndSet是通常直接在硬件中实现的操作,因此getAndSet是根据compareAndSet实现的。

该方法的工作方式如下:首先,返回当前值。现在,另一个线程可能会同时更改该值,因此必须使用compareAndSet检查它不是这种情况。如果另一个线程更改了该值,则必须重复该过程,因为否则将返回错误的值。因此循环。

08-17 09:10