`

AtomicReferenceFieldUpdater 使用

阅读更多
AtomicReferenceFieldUpdater位于java.util.concurrent.atomic包中,作用是原子性地更新对象属性

以原子性更新Cat类的name属性为例:

name属性需要保持可见性,且不是私有变量
class Cat {
	volatile String name = "mycat";
}


1. 实例化Updater

调用AtomicReferenceFieldUpdater类的静态newUpdater方法实例化,传入需要原子性更新属性的Cat类、被更新属性类型为String,名称为name:
AtomicReferenceFieldUpdater<Cat, String> updater = AtomicReferenceFieldUpdater.newUpdater(Cat.class,
		String.class, "name");


2. 实例化目标类

创建一个需要原子性更新name属性的Cat实例:
Cat cat1 = new Cat();


3. 原子性更新

调用compareAndSet方法原子性更新name属性:传入上一步创建的Cat实例cat1、期望的原name值和新name值:

当cat1的原name值是期望的"mycat"时,会被更新为"myPet"
updater.compareAndSet(cat1, "mycat", "myPet");
System.out.println(cat1.name); // myPet


原name值不是"mycat"时,不予更新:
cat1.name = "mycat1";
updater.compareAndSet(cat1, "mycat", "myPet");
System.out.println(cat1.name); // mycat1
分享到:
评论

相关推荐

    阿里巴巴1.4代码书写规范word版本

    - **正例**:如JDK中`AtomicReferenceFieldUpdater`。 12. **推荐规定**:如果使用了设计模式,则在命名中体现具体模式。 - **正例**:如`OrderFactory`、`LoginProxy`、`ResourceObserver`。 13. **推荐规定**...

    Java并发编程实践-电子书-08章实用.pdf

    例如,`AtomicIntegerArray`用于原子操作整型数组,而`AtomicReferenceFieldUpdater`则允许原子更新对象的特定字段。 总结来说,Java并发编程中的原子变量和非阻塞算法是应对锁的劣势的有效手段,它们提供了更高效...

    原子类测试

    - `AtomicIntegerFieldUpdater`、`AtomicLongFieldUpdater`和`AtomicReferenceFieldUpdater`:动态生成特定类的某个字段的原子更新器,适用于无法直接访问的类的字段。 4. 原子类的工作原理: 原子类内部利用了...

    Kotlin协程分析(一)——协程的创建过程和执行过程.pdf

    4. **原子操作**:在`SafeContinuation`的`resumeWith`方法中,使用了原子更新器`AtomicReferenceFieldUpdater`来保证在并发环境下对`result`字段的修改是线程安全的。这是协程在挂起和恢复时检查状态的关键部分。 ...

    CAS底层原理与ABA问题.docx

    如果需要对多个共享变量进行原子操作,就需要使用锁或者其他并发控制机制,如`java.util.concurrent.atomic.AtomicReferenceFieldUpdater`等工具类。 3. **ABA问题**:在某些情况下,一个线程读取到的值A,在其他...

    Java多线程之进阶篇(二).docx

    - `AtomicLongFieldUpdater`、`AtomicIntegerFieldUpdater` 和 `AtomicReferenceFieldUpdater`:这些类允许程序员自定义地更新某个对象的特定字段,提供了一种灵活的方式去原子性地更新非静态字段。 在实际开发中...

    Java并发学习-AtomicIntegerFieldUpdater字段原子更新类.docx

    6. **仅限于int/long类型**:AtomicIntegerFieldUpdater和AtomicLongFieldUpdater只能更新int和long类型的字段,如果需要更新Integer或Long这样的包装类型,应使用AtomicReferenceFieldUpdater。 通过以下示例代码...

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

     高并发编程第三阶段10讲 AtomicIntegerFieldUpdater,AtomicLongFieldUpdater,AtomicReferenceFieldUpdater讲解.mp4  高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4  高并发编程第三...

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

     高并发编程第三阶段10讲 AtomicIntegerFieldUpdater,AtomicLongFieldUpdater,AtomicReferenceFieldUpdater讲解.mp4  高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4  高并发编程第三...

    concurrency:并发学习

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

    JDK- jdk1.8.0-211.zip

    JDK 8对并发库进行了优化,包括改进的Fork/Join框架、新的并发数据结构(如`Double-checked Locking`的替代品`AtomicReferenceFieldUpdater`)以及更好的垃圾收集器,如G1垃圾收集器。 ### 10. **模块系统(Project...

    java线程-Atomic的含义及示例_.docx

    3. **字段更新器**:例如`AtomicLongFieldUpdater`、`AtomicIntegerFieldUpdater`和`AtomicReferenceFieldUpdater`,用于更新对象字段的原子操作。 4. **引用类型**:如`AtomicMarkableReference`、`...

    Java多线程Atomic包操作原子变量与原子类详解

    4. `AtomicIntegerFieldUpdater`, `AtomicLongFieldUpdater`, `AtomicReferenceFieldUpdater`: 这些类允许原子地更新指定类的指定字段。它们适用于那些不能直接使用原子类的场景,比如字段是私有的或者被final修饰的...

    jdk7:查看JDK7原始码使用的项目-看

    这个特性使得代码更加简洁和安全,源码中体现在`java.lang.AutoCloseable`接口和`java.util.concurrent.atomic.AtomicReferenceFieldUpdater`等类中。 2. **多catch语句**:JDK7允许在一个`catch`块中捕获多种类型...

    java并发之原子操作类和非阻塞算法

    此外,还有针对数组元素的`AtomicIntegerArray`, `AtomicLongArray`, `AtomicReferenceArray`,以及针对引用和字段的`AtomicReference`, `AtomicReferenceFieldUpdater`, `AtomicMarkableReference`等。这些类的原子...

    Java原子变量类原理及实例解析

    包括AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater等,它们都是针对Java字段进行原子更新的。 四、AtomicInteger的用法 AtomicInteger是Java中的一个原子变量类,它可以对整型...

    Java原子操作CAS原理解析

    11. AtomicReferenceFieldUpdater基于反射的实用工具,可以对指定类的指定 volatile 字段进行原子更新。 12. AtomicStampedReference维护带有整数“标志”的对象引用,可以用原子方式对其进行更新。 以...

    Java锁之自旋锁详解

    3. CLHLock(Craig, Landin, and Hagersten Lock)和MCSLock(Mellor-Crummey and Scott Lock):这两种自旋锁是基于链表结构的公平锁,它们将等待线程组织成一个队列,并使用`AtomicReferenceFieldUpdater`等原子...

Global site tag (gtag.js) - Google Analytics