`
messi_18
  • 浏览: 98979 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Atomic reference vs volatile reference

    博客分类:
  • java
 
阅读更多
volatile reference和atomic reference的作用有何不同?
通过查阅AtomicReference的代码发现,它内部是基于volatile的field来存储reference。所以,它具备volatile的功能。如果,只是想解决“可见性”,直接用AtomicReference的get和set方法就相当于volatile的作用。但是,volatile无法保证多个线程写入不相互覆盖的问题。

怎么解决呢?加锁。这个谁都知道。不加锁呢?就可以用AtomicReference提供的CAS方法compareAndSet(expected,actual)。如果volatile域的值等于expected那么就用actual去更新然后返回true,否则返回false。

所以,常见的变成模式是用一个循环(比如volatile域是数组):
private AtomicReference<int[]>items=new AtomicReference();
public void add(int item){
  int[] copy = items.get(); // get copy
  while(true) {
    int[] updated=Arrays.copyOf(copy,copy.length+1);
    updated[updated.length-1]=item;
    if(items.compareAndSet(copy,updated)){
      return;
    }  
  }
}
分享到:
评论

相关推荐

    volatile,nonatomic和atomic关键字测试

    在iOS和Mac开发中,Objective-C是主要的编程语言,它在定义实例变量或属性时提供了几个关键的修饰符,包括`volatile`、`nonatomic`和`atomic`。这些关键字对于理解多线程环境下的数据同步和内存管理至关重要。本文将...

    synchronized ReentrantLock volatile Atomic 原理分析.docx

    《Java并发编程:synchronized、ReentrantLock、volatile与Atomic深度解析》 在Java多线程编程中,正确地管理共享资源是至关重要的。本文将深入探讨四种关键的并发控制机制:synchronized关键字、ReentrantLock(可...

    atomic_ops原子操作1

    在 atomic_ops 中,volatile 是一个非常重要的关键字。它用于确保变量的读写操作是原子的。但是,使用 volatile 可能会带来性能损失,因此应该尽量避免使用。 atomic_ops 的实现 atomic_ops 的实现需要遵循一定的...

    atomic_ops.pdf

    历史上,`atomic_t`中的`counter`字段被声明为`volatile`。然而,这种做法现在不被鼓励。文档提到,有关`volatile`关键字的完整讨论可以在`Documentation/volatile-considered-harmful.txt`找到。这里强调了`...

    C++ Standard Library Quick Reference

    a new powerful regular expression library, and a portable multithreading library featuring threads, mutexes, condition variables, and atomic variables. Needless to say, it is hard to know and ...

    volatile关键字使用

    在编写多线程程序时,如果需要更高级别的同步保障,还需要使用锁、原子变量(如C++11中的`std::atomic`)或其他并发原语。 此外,`volatile`关键字的使用需要谨慎,过度使用可能会导致性能下降,因为它阻止了编译器...

    c++ 参考资料 www.cplusplus.com reference

    在描述中提到的“reference”部分,通常包含了C++语言的标准库函数、类、模板和预定义实体的详细信息。这些参考文档对于开发者来说是不可或缺的工具,可以帮助他们理解和使用C++的各种功能。 C++的`reference`部分...

    前端开源库-atomic-batcher

    **原子批处理库atomic-batcher** 在前端开发中,我们经常需要执行一系列操作,例如更新DOM、发送网络请求或处理大量数据。这些操作如果逐一执行,可能会导致性能问题,特别是当操作数量大时。为了解决这个问题,...

    atomic_data.tgz

    《ATOMIC:机器常识推理的综合图谱》 在当今的自然语言处理(NLP)领域,理解人类的常识推理是关键挑战之一。"atomic_data.tgz" 是一个专门针对这一问题的数据集,名为 ATOMIC(An Atlas of Machine Commonsense ...

    boost_atomic.7z

    《深入理解Boost库:探索原子操作atomic》 在软件开发中,尤其是在多线程和并发编程领域,确保数据的一致性和完整性是至关重要的。Boost库,作为C++的一个强大工具集,提供了各种实用的组件来解决这些问题。其中,`...

    atomic

    在IT行业中,"atomic"这个概念可能涉及到多个领域,但在这里与"字体"标签结合,我们可以推断讨论的是Atomic Design理论在网页设计或用户界面(UI)设计中的应用,特别是与字体相关的原子组件。Atomic Design是一种...

    volatile的使用1

    如果需要原子性操作,可以使用`synchronized`或`java.util.concurrent.atomic`包中的原子类。 4. **应用场景**:volatile适合用于那些读操作频繁,写操作不依赖当前值,并且不需要复合操作的场景。例如,作为共享...

    Atomic

    在IT领域,"Atomic"可能指的是多个概念,但在这个场景中,由于标签是"字体",我们可以推测这里的"Atomic"是指一种特定的字体或者排版风格。字体在计算机科学和设计行业中扮演着至关重要的角色,它影响着用户对数字...

    时钟工具Atomic Alarm Clock

    "Atomic Alarm Clock"是一款功能丰富的时钟工具,它集成了闹钟、日历等多种实用功能,为用户提供了一站式的计时解决方案。这款软件在日常生活中非常实用,不仅可以准确地显示时间,还可以设置个性化的闹钟提醒,确保...

    C++ Standard Library Reference.pdf

    首先,文档的标题“C++ Standard Library Reference.pdf”表明了这份文件是一个参考手册,为C++程序员提供了标准库的详细指南。标准库是C++编程语言的一个核心组成部分,它包含了一系列经过严格测试和标准化的类、...

    Atomic Alarm Clock 6.3

    Win8~10系统右下角日期与时钟同时显示但精美,可取代系统本身的,非常醒目。

    C++ Standard Library Quick Reference(Apress,2016)

    a new powerful regular expression library, and a portable multithreading library featuring threads, mutexes, condition variables, and atomic variables. Needless to say, it is hard to know and ...

    解开Volatile的面纱V1.1

    但需要注意的是,`volatile`关键字并不能保证复合操作(如i++)的原子性,对于这类需求,应考虑使用`synchronized`或者`java.util.concurrent.atomic`包中的原子类。 总结来说,`volatile`关键字是Java并发编程中的...

Global site tag (gtag.js) - Google Analytics