Java併發AtomicReference類
java.util.concurrent.atomic.AtomicReference
類提供了可以原子讀取和寫入的底層對象引用的操作,還包含高級原子操作。 AtomicReference
支持對底層對象引用變量的原子操作。 它具有獲取和設置方法,如在易變的變量上的讀取和寫入。 也就是說,一個集合與同一變量上的任何後續get
相關聯。 原子compareAndSet
方法也具有這些內存一致性功能。
AtomicReference類的方法
以下是AtomicReference
類中可用的重要方法的列表。
序號
方法
描述
1
public boolean compareAndSet(V expect, V update)
如果當前值==
期望值,則將該值原子設置爲給定的更新值。
2
public boolean get()
返回當前值。
3
public boolean getAndSet(V newValue)
將原子設置爲給定值並返回上一個值。
4
public void lazySet(V newValue)
最終設定爲給定值。
5
public void set(V newValue)
無條件地設置爲給定的值。
6
public String toString()
7
public boolean weakCompareAndSet(V expect, V update)
如果當前值==
期望值,則將該值原子設置爲給定的更新值。
實例
以下TestThread
程序顯示了基於線程的環境中AtomicReference
變量的使用。
import java.util.concurrent.atomic.AtomicReference;
public class TestThread {
private static String message = "hello";
private static AtomicReference<String> atomicReference;
public static void main(final String[] arguments) throws InterruptedException {
atomicReference = new AtomicReference<String>(message);
new Thread("Thread 1") {
public void run() {
atomicReference.compareAndSet(message, "Thread 1");
message = message.concat("-Thread 1!");
};
}.start();
System.out.println("Message is: " + message);
System.out.println("Atomic Reference of Message is: " + atomicReference.get());
}
}
這將產生以下結果 -
Message is: hello
Atomic Reference of Message is: Thread 1