Java類AtomicReference詳解


前言

Atomic家族主要是保證多線程環境下的原子性,相比synchronized而言更加輕量級。比較常用的是AtomicInteger,作用是對Integer類型操作的封裝,而AtomicReference作用是對普通對象的封裝。

對AtomicInteger原子性不了解的,可以看這篇:volatile詳解

先看個例子

先簡單定義個 User 類

@Data
@AllArgsConstructor
public 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仍然為“李四”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM