java - Java AtomicReference#getAndSet 的用例是什么?
问题描述
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;
}
从调用者的角度来看?
解决方案
不,这些不是等价的。不同之处在于getAndSet
这两种操作都是原子的,而不仅仅是一个原子的 get 和一个原子的 set。
getAndSet
始终保证在设置新值之前准确返回存储在引用中的值。volatile 版本可能会“跳过”其他线程插入的值。
推荐阅读
- javascript - 最大更新深度警告反应
- plotly-dash - 根据用户输入更新破折号数据表列中的值
- amazon-web-services - “此 URL 包含无效域” - 使用 facebook 应用程序注册 Amazon Cognito 域时出错
- django - Django - 无法显示图像 | 静态文件夹设置问题
- ios - 在 TableViewController 中呈现嵌套数组
- javascript - JSON、数学和循环上的 JS/React 操作的最佳实践(性能方面)是什么?
- c# - Visual Studio 找不到最新安装的 .NET SDK
- javascript - 在 For 循环中使用异步函数
- html - 创建 Bootstrap 卡片布局以在 Wordpress 上显示博客文章
- python - 附加到 json 文件时出现“预期文件结尾”