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循环,做一些逻辑,尝试比较和设置.)