一、AtomicReference介绍
①.AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普通的对象引用。也就是它可以保证你在修改对象引用时的线程安全性。
②.AtomicReference是作用是对”对象”进行原子操作。 提供了一种读和写都是原子性的对象引用变量。原子意味着多个线程试图改变同一个AtomicReference(例如比较和交换操作)将不会使得AtomicReference处于不一致的状态。
二、使用示例
import java.util.concurrent.atomic.AtomicReference;
/**
* @author qingnianren
*/
public class AtomicReferenceTest {
public static void main(String[] args) {
User zs = new User("张三", 22);
User ls = new User("李四", 24);
User ww = new User("王五", 27);
AtomicReference<User> userAtomicReference = new AtomicReference<>(new User());
userAtomicReference.set(zs);
// User(name=张三, age=22)
System.out.println("第一次赋值==" + userAtomicReference.get());
// 如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值
boolean result = userAtomicReference.compareAndSet(zs, ls);
// true(由于zs == zs)
System.out.println("结果==" + result);
// User(name=李四, age=24)
System.out.println("第二次赋值==" + userAtomicReference.get());
boolean result2 = userAtomicReference.compareAndSet(zs, ww);
// false(由于ls != zs)
System.out.println("结果==" + result2);
// User(name=李四, age=24)
System.out.println("第三次赋值==" + userAtomicReference.get());
boolean result3 = userAtomicReference.compareAndSet(ls, ww);
// true(由于ls == ls)
System.out.println("结果" + result3);
// User(name=王五, age=27)
System.out.println("第四次赋值==" + userAtomicReference.get());
}
}