`

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

    Java中的`AtomicReference`和`AtomicStampedReference`类就是为了实现这种原子性操作而设计的。这两个工具类都是基于Compare-and-Swap (CAS)算法,CAS是一种无锁同步机制,它提供了在不使用锁的情况下实现线程安全...

    菜鸟虚怀项目笔试题(1).docx

    static AtomicReference&lt;Integer&gt; atomicReference = new AtomicReference(9); public static void main(String[] args) { while (true) { new Thread(() -&gt; { if (atomicReference.get() &gt; 0) { if ...

    击穿单例模式的Demo示范代码

    private static final AtomicReference&lt;Singleton&gt; instance = new AtomicReference(); private Singleton() {} public static Singleton getInstance() { Singleton current = instance.get(); if (current ...

    JUC面试知识点手册快速版

    第一章:Java并发简介 1.1 什么是并发编程 ...5.2 AtomicReference 第六章:线程池及其应用 6.1 ThreadPoolExecutor 6.2 ScheduledThreadPoolExecutor 第七章:Fork/Join框架 7.1 ForkJoinPool 等等

    Java对象交换方法剖析.zip

    AtomicReference&lt;String&gt; ref1 = new AtomicReference("A"); AtomicReference&lt;String&gt; ref2 = new AtomicReference("B"); ref1.getAndSet(ref2.get()); // A现在指向B ref2.getAndSet(ref1.get()); // B现在指向...

    单例模式讲解案例

    7. 非阻塞单例(基于AtomicReference):使用AtomicReference保证线程安全,同时保持高性能。 ```java import java.util.concurrent.atomic.AtomicReference; public class Singleton { private static final ...

    单例的多种写法和说明比较

    private static final AtomicReference&lt;Singleton&gt; INSTANCE = new AtomicReference(); private Singleton() {} public static Singleton getInstance() { Singleton instance = INSTANCE.get(); if ...

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

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

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

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

    Java并发编程(一)

    原子操作(Atomic Operations):Java提供了一些原子操作类(如AtomicInteger、AtomicReference)保证操作过程不会被其他线程打断。 并发集合(Concurrent Collections):Java并发工具包提供了一套特殊的集合类,...

    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并发编程之CAS

    在Java并发包(java.util.concurrent,简称JUC)中,`Unsafe`类被广泛应用于实现高效、无锁的数据结构,如`AtomicInteger`、`AtomicReference`等。这些类的原子操作,如`getAndSet`、`compareAndExchange`等,都是...

    04 并发编程专题01.zip

    Java的`java.util.concurrent.atomic`包中包含了一系列的原子类,如`AtomicInteger`、`AtomicLong`、`AtomicReference`等。这些类提供了一种在多线程环境下更新变量的方式,无需显式使用`synchronized`关键字或者`...

    Thread基础知识点笔记总结

    AtomicReference 是 Java 中的一个原子引用类,用于包装对象,使得对象在并发操作时可以保证原子性。AtomicStampedReference 是一个原子引用类,用于解决 ABA 问题,通过加了版本进行控制。 4. Collections Java ...

    针对于Executor框架,Java API,线程共享数据

    - **使用线程安全的对象**:除了原子类之外,Java还提供了一些其他的线程安全对象,比如AtomicInteger、AtomicReference等。这些对象同样提供了原子操作的方法,可用于实现线程间的共享数据。 - **使用锁和条件变量*...

    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

Global site tag (gtag.js) - Google Analytics