何时使用AtomicReference(Java)?真的有必要吗?
我已经使用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。
我不确定是哪一个,因为如果使用.equals,则该类的javadoc和代码不清楚。
看到上面的方法写起来不那么难吗,有人使用过AtomicReference吗?
回答:
这是 参考
,因此可以进行比较。该文档非常清楚地表明这是一个身份比较,即使使用描述中的==
操作也是如此。
我AtomicReference
经常使用和其他原子类。分析表明,与使用同步的等效方法相比,它们的性能更好。例如,对的get()
操作AtomicReference
仅需要从主内存中提取,而使用的类似操作synchronized
必须首先将线程缓存的所有值刷新到主内存,然后执行其提取。
这些AtomicXXX
类提供对比较和交换(CAS)操作的本机支持的访问。如果基础系统支持它,那么CAS将比使用synchronized
纯Java块构建的任何方案都要快。
以上是 何时使用AtomicReference(Java)?真的有必要吗? 的全部内容, 来源链接: utcz.com/qa/434882.html