我已经多次使用过AtomicLong,但从未需要使用过AtomicReference。
看起来AtomicReference执行以下操作(我从另一个stackoverflow问题中复制了此代码):
public synchronized boolean compareAndSet(List<Object> oldValue, List<Object> newValue) {
if (this.someList == oldValue) {
// someList could be changed by another thread after that compare,
// and before this set
this.someList = newValue;
return true;
}
return false;
}
或者
public synchronized boolean compareAndSet(List<Object> oldValue, List<Object> newValue) {
if (this.someList == oldValue || this.someList.equals(oldValue)) {
// someList could be changed by another thread after that compare,
// and before this set
this.someList = newValue;
return true;
}
return false;
}
假设 this.someList 被标记为 volatile。
我不确定它是哪一个,因为该类的 javadoc 和代码并没有明确说明是否使用了 .equals 方法。
由于上述方法并不难编写,因此有人使用过 AtomicReference 吗?