AtomicReferenceFieldUpdater 使用

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

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

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


1. 实例化Updater

调用 AtomicReferenceFieldUpdater类的静态 newUpdater方法实例化,传入需要原子性更新属性的Cat类、被更新属性类型为String,名称为name:
AtomicReferenceFieldUpdater 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

你可能感兴趣的:(java,atomic,field,updater)