首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多线程应用程序中,易失关键字是否由于AtomicXXX变量而失去了相关性?

在多线程应用程序中,易失关键字是否由于AtomicXXX变量而失去了相关性?
EN

Stack Overflow用户
提问于 2016-05-17 16:39:20
回答 1查看 153关注 0票数 3

来自页面文档

包java.util.concurrent.atomic描述:

支持对单变量进行无锁线程安全编程的类的小型工具包。本质上,这个包中的类将易失性值、字段和数组元素的概念扩展到那些同时提供表单的原子条件更新操作的类。

代码语言:javascript
复制
boolean compareAndSet(expectedValue, updateValue);

在原子包中有许多可用的选项,如

代码语言:javascript
复制
AtomicBoolean
AtomicInteger
AtomicLongArray

等等,我可以使用这些AtomicXXX并慢慢地消除遗留代码中的易失性变量吗?

编辑:

  1. 保留volatile用于不同线程中的单次写入和多次读取操作(我在阅读了许多文章后得出的结论)、多作者、单读者案例(根据@erickson注释)。
  2. 使用AtomicXXX进行多个更新&在多个线程之间进行多次读取,以避免synchronization。向易失性变量提供原子性。

我的思维过程已经被@erickson更改了,comments.易失性支持多个写入&单个读,但如果多次写入和多次读取,则可能会失败。我对这个概念感到困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-17 16:46:52

是的,AtomicXXX实例提供了与访问volatile字段相同的可见性保证。

然而,AtomicXXXvolatile字段做的更多,因此,它们的使用成本要高一些。具体来说,它们提供的操作更像是优化的synchronized块,而不是volatile读写。您可以增加和获取,或比较-和交换-多个动作,原子。易失性变量不提供任何原子性。

因此,从volatile切换到AtomicXXX并不一定是一个好的举措。考虑考虑如何使用数据是否有意义,也许可以对一个原型进行一些分析,看看它将对性能产生什么样的影响。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37281948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档