我有一个独特的情况。我希望能够使用AtomicReference
的compareAndSet()
功能,但有点扭曲。
通常,在实际更改单个预期值之前,使用compareAndSet()
与单个预期值进行比较。在我的例子中,要比较的预期值可能是许多值之一。
有没有办法使用AtomicReference
做到这一点?如果没有,我应该使用哪些其他技术?也许只是传统的synchronized
用途?
我假设您有Set
的期望值。 在这种情况下...
<T> boolean setIfInExpected(AtomicReference<T> ref, Set<?> expected, T newValue) {
while (true) {
T current = ref.get();
if (set.contains(current)) {
if (atomicReference.compareAndSet(current, newValue)) {
return true;
}
} else {
return false;
}
}
}
这是compareAndSet
的典型使用方式:它们在循环中运行,直到AtomicReference
在get
和compareAndSet
之间没有变化。