个人学习笔记,如有错误欢迎指正。。
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黄埔军校
CAS cas带来的好处 1.可见性 2.有序性 3.原子性 volatile修饰的变量,保证前俩者 CAS算法,也就是cpu级别的同步指令,相当于乐观锁,它可以探测到其他线程对共享数据的变化情况\ cas带来一个ABA问题 ...
数组阻塞队列ArrayBlockingQueue,延迟队列DelayQueue, ...原子性长整型 AtomicLong,原子性引用型 AtomicReference 修改数据: 一 服务端修改数据: 一 文章知识点与官方知识档案匹配,可进一步学习相关知识
借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue ...25. 原子性引用型 AtomicReference
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue ...25. 原子性引用型 AtomicReference
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...
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一...25. 原子性引用型 AtomicReference
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一...25. 原子性引用型 AtomicReference
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,...
高并发编程第三阶段07讲 AtomicReference详解,CAS算法带来的ABA问题详解.mp4 高并发编程第三阶段08讲 AtomicStampReference详解,解决CAS带来的ABA问题.mp4 高并发编程第三阶段09讲 AtomicIntegerArray,...
CAS(AtomicReference)实现单例模式2. ThreadLocal实现单例模式如何破坏单例如何防止单例被破坏参考文章 单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类...
AtomicReference AtomicStampedReference和ABA问题的解决 集合类不安全问题 List CopyOnWriteArrayList Set HashSet和HashMap Map Java锁 公平锁/非公平锁 可重入锁/递归锁 锁的配对 自旋锁 读写锁/独占/共享锁 ...
AtomicReference、AtomicReferenceFieldUpdater AtomicStampReference:CAS的ABA问题 原子性-synchronized 修饰代码块:大括号括起来的代码,作用于调用的对象 修饰方法:整个方法,作用于调用的对象 修饰静态方法:...
AtomicReference :原子NSObject包装器(参见下面的“单个请求”示例) 用法 所有原子类都公开一个公共接口: getValue:和setValue:是简单的变量读取和写入操作,保证是原子的, HOPAtomicReference是这里唯一的...
AtomicInteger, AtomicLong, AtomicBoolean, AtomicReference main methods - get(), set(), lazySet(), compareAndSet(), weakCompareAndSet() 线程安全集合-并发集合 CopyOnWriteArrayList<E> ...
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. ...
AtomicInteger和AtomicReference <>显然是用于高性能,线程安全的数据和对象交换的不错的类。 可能需要进行更多研究,因为明确提到使用此功能可以构建主要的非阻塞数据结构-某种程度上违背了目的。