问题描述
Java atomicreference#getAndSet
的用例是什么?换句话说,是否正确的假设是:如果我在代码中使用的atomicreference
中唯一的方法是atomicreference#getAndSet
,那么我根本不需要atomicreference
,只需{{ 1}}变量就够了吗?
volatile
,不是总是和
完全一样吗?private final atomicreference<String> string = new atomicreference<>("old");
public String getAndSet() {
return string.getAndSet("new");
}
从呼叫者的角度来看?
解决方法
不,这些不是等效的。区别在于getAndSet
原子地执行两个操作,而不仅仅是原子获取,然后是原子集。
getAndSet
准确地返回 在设置新值之前存储在参考 中的值。易失性版本可能会“跳过”其他线程插入的值。