何时使用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

回到顶部