前言
Atomic家族次要是保障多线程环境下的原子性,相比synchronized而言更加轻量级。比拟罕用的是AtomicInteger,作用是对Integer类型操作的封装,而AtomicReference作用是对一般对象的封装。
对AtomicInteger原子性不理解的,能够看这篇:volatile详解
先看个例子
// 先简略定义个 User 类@Data@AllArgsConstructorpublic class User { private String name; private Integer age;}
// 应用 AtomicReference 初始化,并赋值public static void main( String[] args ) { User user1 = new User("张三", 23); User user2 = new User("李四", 25); User user3 = new User("王五", 20); //初始化为 user1 AtomicReference<User> atomicReference = new AtomicReference<>(); atomicReference.set(user1); //把 user2 赋给 atomicReference atomicReference.compareAndSet(user1, user2); System.out.println(atomicReference.get()); //把 user3 赋给 atomicReference atomicReference.compareAndSet(user1, user3); System.out.println(atomicReference.get());}
输入后果如下:
User(name=李四, age=25)User(name=李四, age=25)
解释
compareAndSet(V expect, V update)
该办法作用是:如果atomicReference==expect,就把update赋给atomicReference,否则不做任何解决。
atomicReference
的初始值是user1
,所以调用compareAndSet(user1, user2)
,因为user1==user1
,所以会把user2
赋给atomicReference
。此时值为“李四”
- 第二次调用atomicReference.compareAndSet(user1, user3),因为
user2 != user1
,所以set
失败。atomicReference
依然为“李四”
援用:https://www.cnblogs.com/fhbli...