gpt4 book ai didi

java - 什么时候使用 AtomicReference (Java)?真的有必要吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:57:28 26 4
gpt4 key购买 nike

我已经多次使用 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 被标记为易变的。

我不确定它到底是哪一个,因为 javadoc 和该类的代码不清楚是否使用了 .equals。

看到上面的方法并不难写,有人用过 AtomicReference 吗?

最佳答案

它是一个引用,所以这就是比较的内容。文档非常清楚这是一个身份比较,即使在 its description. 中使用 == 操作也是如此。

我经常使用 AtomicReference 和其他原子类。分析显示它们比使用同步的等效方法执行得更好。例如,AtomicReference 上的 get() 操作只需要从主内存中获取数据,而使用 synchronized 的类似操作必须先刷新线程缓存到主内存的任何值,然后执行其提取。

AtomicXXX 类提供对比较和交换 (CAS) 操作的 native 支持的访问。如果底层系统支持它,CAS 将比纯 Java 中使用 synchronized block 编写的任何方案更快。

关于java - 什么时候使用 AtomicReference (Java)?真的有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com