java的用例是什么 AtomicReference#getAndSet
? 换言之,如果唯一的方法 AtomicReference
我在代码中使用的是 AtomicReference#getAndSet
,那我就不需要了 AtomicReference
一点也不,只是 volatile
变量就足够了?
例如,如果我有下一个代码:
private final AtomicReference<String> string = new AtomicReference<>("old");
public String getAndSet() {
return string.getAndSet("new");
}
,它不总是和
private volatile String string = "old";
public String getAndSet() {
String old = string;
string = "new";
return old;
}
从来电者的Angular 看?
1条答案
按热度按时间yks3o0rb1#
不,这些不是等价的。不同的是
getAndSet
这两个操作都是原子化的,而不仅仅是一个原子get和一个原子集合。getAndSet
始终保证精确返回在设置新值之前存储在引用中的值。易失性版本可能会“跳过”其他线程插入的值。