来自页面文档
包java.util.concurrent.atomic描述:
支持对单变量进行无锁线程安全编程的类的小型工具包。本质上,这个包中的类将易失性值、字段和数组元素的概念扩展到那些同时提供表单的原子条件更新操作的类。
boolean compareAndSet(expectedValue, updateValue);在原子包中有许多可用的选项,如
AtomicBoolean
AtomicInteger
AtomicLongArray等等,我可以使用这些AtomicXXX并慢慢地消除遗留代码中的易失性变量吗?
编辑:
volatile用于不同线程中的单次写入和多次读取操作(我在阅读了许多文章后得出的结论)、多作者、单读者案例(根据@erickson注释)。AtomicXXX进行多个更新&在多个线程之间进行多次读取,以避免synchronization。向易失性变量提供原子性。我的思维过程已经被@erickson更改了,comments.易失性支持多个写入&单个读,但如果多次写入和多次读取,则可能会失败。我对这个概念感到困惑。
发布于 2016-05-17 16:46:52
是的,AtomicXXX实例提供了与访问volatile字段相同的可见性保证。
然而,AtomicXXX比volatile字段做的更多,因此,它们的使用成本要高一些。具体来说,它们提供的操作更像是优化的synchronized块,而不是volatile读写。您可以增加和获取,或比较-和交换-多个动作,原子。易失性变量不提供任何原子性。
因此,从volatile切换到AtomicXXX并不一定是一个好的举措。考虑考虑如何使用数据是否有意义,也许可以对一个原型进行一些分析,看看它将对性能产生什么样的影响。
https://stackoverflow.com/questions/37281948
复制相似问题