`

AtomicReference

 
阅读更多

个人学习笔记,如有错误欢迎指正。。

 

AtomicReference 提供了原子的方式更新对象引用。用于多线程之间。

 

对象的引用赋值本身就是原子的。

如:共享变量Object o ;

 线程A 执行 :o = "x";//原子的线程安全

 线程B 执行 o =  new Integer(12);//原子的线程安全

 

那么为什么要使用 AtomicReference 呢? 

有一种情况,一个对象的生成依赖于原始对象。 

如线程取出原始对象,基于原始对象的数据再去操作,从而生成新的对象,在保存时原始对象已被其它线程改变了,也就是说刚才线程的操作都不正确了,就不应该更新对象的引用。

 

 

AtomicReference 提供了一个方法,能够知道是否原始对象已改变及原子的线程安全的设定新值。

public final boolean compareAndSet(V expect, V update)

该方法提共了原子方式比较设置,如 expect值与原值相等(指内存地址),则update新值,并返回真,否则返回假。

 

 

 

AtomicReferenceFieldUpdater:

JAVA API:

于反射的实用工具,可以对指定类的指定 volatile 字段进行原子更新。该类用于原子数据结构,该结构中同一节点的几个引用字段都独立受原子更新控制。例如,树节点可能声明为

 class Node {
   private volatile Node left, right;

   private static final AtomicReferenceFieldUpdater<node, node=""> leftUpdater =
     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "left");
   private static AtomicReferenceFieldUpdater<node, node=""> rightUpdater =
     AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "right");

   Node getLeft() { return left;  }
   boolean compareAndSetLeft(Node expect, Node update) {
     return leftUpdater.compareAndSet(this, expect, update);
   }
   // ... and so on
 }
 
分享到:
评论

相关推荐

    Java concurrency之AtomicReference原子类_动力节点Java学院整理

    Java concurrency之AtomicReference原子类_动力节点Java学院整理,动力节点口口相传的Java黄埔军校

    atomicReference 使用和AtomicStampedReference 解决ABA的问题.docx

    CAS cas带来的好处 1.可见性 2.有序性 3.原子性 volatile修饰的变量,保证前俩者 CAS算法,也就是cpu级别的同步指令,相当于乐观锁,它可以探测到其他线程对共享数据的变化情况\ cas带来一个ABA问题 ...

    一个小的java Demo , 非常适合Java初学者学习阅读.rar

    数组阻塞队列ArrayBlockingQueue,延迟队列DelayQueue, ...原子性长整型 AtomicLong,原子性引用型 AtomicReference 修改数据: 一 服务端修改数据: 一 文章知识点与官方知识档案匹配,可进一步学习相关知识

    Java BigDecimal详解_动力节点Java学院整理

    借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。...

    java并发工具包详解

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue ...25. 原子性引用型 AtomicReference

    java并发工具包 java.util.concurrent中文版用户指南pdf

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue ...25. 原子性引用型 AtomicReference

    java线程学习笔记

    2.2.2 原子类(AtomicInteger,AtomicLong,AtomicReference) 13 2.3 线程本地存储(Java.lang.ThreadLocal) 15 2.4 线程阻塞 17 2.4.1 调用sleep(millisecond)使任务进入休眠状态 17 2.4.2 等待输出与输入 17 2.4.3...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一...25. 原子性引用型 AtomicReference

    java并发包资源

    本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一...25. 原子性引用型 AtomicReference

    AtomicReference.rar_Java编程_Unix_Linux_

    An object reference that may be updated atomically. See the {@link java.util.concurrent.atomic package specification for description of the properties of atomic variables.

    汪文君高并发编程实战视频资源全集

     高并发编程第三阶段07讲 AtomicReference详解,CAS算法带来的ABA问题详解.mp4  高并发编程第三阶段08讲 AtomicStampReference详解,解决CAS带来的ABA问题.mp4  高并发编程第三阶段09讲 AtomicIntegerArray,...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段07讲 AtomicReference详解,CAS算法带来的ABA问题详解.mp4  高并发编程第三阶段08讲 AtomicStampReference详解,解决CAS带来的ABA问题.mp4  高并发编程第三阶段09讲 AtomicIntegerArray,...

    这可能是最全的单例模式了

    CAS(AtomicReference)实现单例模式2. ThreadLocal实现单例模式如何破坏单例如何防止单例被破坏参考文章 单例模式有以下特点:  1、单例类只能有一个实例。  2、单例类必须自己创建自己的唯一实例。  3、单例类...

    常见的Java笔试题-JVM-JUC-Core:JUCJVM核心知识点

    AtomicReference AtomicStampedReference和ABA问题的解决 集合类不安全问题 List CopyOnWriteArrayList Set HashSet和HashMap Map Java锁 公平锁/非公平锁 可重入锁/递归锁 锁的配对 自旋锁 读写锁/独占/共享锁 ...

    concurrency:并发学习

    AtomicReference、AtomicReferenceFieldUpdater AtomicStampReference:CAS的ABA问题 原子性-synchronized 修饰代码块:大括号括起来的代码,作用于调用的对象 修饰方法:整个方法,作用于调用的对象 修饰静态方法:...

    Atomics:OSAtomic 包中一些原语的漂亮包装器,使用 Foundation 类型

    AtomicReference :原子NSObject包装器(参见下面的“单个请求”示例) 用法 所有原子类都公开一个公共接口: getValue:和setValue:是简单的变量读取和写入操作,保证是原子的, HOPAtomicReference是这里唯一的...

    ThreadTest:多线程

    AtomicInteger, AtomicLong, AtomicBoolean, AtomicReference main methods - get(), set(), lazySet(), compareAndSet(), weakCompareAndSet() 线程安全集合-并发集合 CopyOnWriteArrayList&lt;E&gt; ...

    Android代码-kotlinx.atomicfu

    Code it like AtomicReference/Int/Long, but run it in production efficiently as AtomicXxxFieldUpdater on Kotlin/JVM and as plain unboxed values on Kotlin/JS. Use Kotlin-specific extensions (e.g. ...

    filesync_server

    AtomicInteger和AtomicReference &lt;&gt;显然是用于高性能,线程安全的数据和对象交换的不错的类。 可能需要进行更多研究,因为明确提到使用此功能可以构建主要的非阻塞数据结构-某种程度上违背了目的。

Global site tag (gtag.js) - Google Analytics