个人学习笔记,如有错误欢迎指正。。
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黄埔军校
Java中的`AtomicReference`和`AtomicStampedReference`类就是为了实现这种原子性操作而设计的。这两个工具类都是基于Compare-and-Swap (CAS)算法,CAS是一种无锁同步机制,它提供了在不使用锁的情况下实现线程安全...
static AtomicReference<Integer> atomicReference = new AtomicReference(9); public static void main(String[] args) { while (true) { new Thread(() -> { if (atomicReference.get() > 0) { if ...
private static final AtomicReference<Singleton> instance = new AtomicReference(); private Singleton() {} public static Singleton getInstance() { Singleton current = instance.get(); if (current ...
第一章:Java并发简介 1.1 什么是并发编程 ...5.2 AtomicReference 第六章:线程池及其应用 6.1 ThreadPoolExecutor 6.2 ScheduledThreadPoolExecutor 第七章:Fork/Join框架 7.1 ForkJoinPool 等等
AtomicReference<String> ref1 = new AtomicReference("A"); AtomicReference<String> 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<Singleton> INSTANCE = new AtomicReference(); private Singleton() {} public static Singleton getInstance() { Singleton instance = INSTANCE.get(); if ...
数组阻塞队列ArrayBlockingQueue,延迟队列DelayQueue, ...原子性长整型 AtomicLong,原子性引用型 AtomicReference 修改数据: 一 服务端修改数据: 一 文章知识点与官方知识档案匹配,可进一步学习相关知识
借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。...
原子操作(Atomic Operations):Java提供了一些原子操作类(如AtomicInteger、AtomicReference)保证操作过程不会被其他线程打断。 并发集合(Concurrent Collections):Java并发工具包提供了一套特殊的集合类,...
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
在Java并发包(java.util.concurrent,简称JUC)中,`Unsafe`类被广泛应用于实现高效、无锁的数据结构,如`AtomicInteger`、`AtomicReference`等。这些类的原子操作,如`getAndSet`、`compareAndExchange`等,都是...
Java的`java.util.concurrent.atomic`包中包含了一系列的原子类,如`AtomicInteger`、`AtomicLong`、`AtomicReference`等。这些类提供了一种在多线程环境下更新变量的方式,无需显式使用`synchronized`关键字或者`...
AtomicReference 是 Java 中的一个原子引用类,用于包装对象,使得对象在并发操作时可以保证原子性。AtomicStampedReference 是一个原子引用类,用于解决 ABA 问题,通过加了版本进行控制。 4. Collections Java ...
- **使用线程安全的对象**:除了原子类之外,Java还提供了一些其他的线程安全对象,比如AtomicInteger、AtomicReference等。这些对象同样提供了原子操作的方法,可用于实现线程间的共享数据。 - **使用锁和条件变量*...
本资源包含两个 pdf 文档,一本根据 Jakob Jenkov 最新博客 (http://tutorials.jenkov.com/java-util-concurrent/index.html) 整理的 java_util_concurrent_user_guide_en.pdf,一...25. 原子性引用型 AtomicReference