java – 返回原始值的AtomicInteger.compareAndSet,而不是布尔值

Java的AtomicInteger提供
public final boolean compareAndSet(int expect, int update).如果返回false,我想知道比较失败时实际值是多少.这在Java中可行吗?

在.Net中,有public static int CompareExchange(ref int location1, int value, int comparand),它始终返回原始值.

最佳答案

public int getAndCompareAndSet(AtomicInteger ai, int expected, int update) {
  while (true) {
    int old = ai.get();
    if (old != expected) {
      return old;
    } else if (ai.compareAndSet(old, update)) {
      return old;
    }
  }
}

(这种循环是AtomicInteger上大多数操作的实现方式:get循环,做一些逻辑,尝试比较和设置.)

点赞