Java Concurrency - Lớp AtomicReference
Một lớp java.util.concurrent.atomic.AtomicReference cung cấp các hoạt động trên tham chiếu đối tượng cơ bản có thể được đọc và viết theo nguyên tử, đồng thời cũng chứa các phép toán nguyên tử nâng cao. AtomicReference hỗ trợ các hoạt động nguyên tử trên biến tham chiếu đối tượng cơ bản. Nó có các phương thức get và set hoạt động như đọc và ghi trên các biến dễ bay hơi. Nghĩa là, một tập hợp có mối quan hệ xảy ra trước với bất kỳ lần nhận nào tiếp theo trên cùng một biến. Phương thức so sánh nguyên tử cũng có các tính năng nhất quán bộ nhớ này.
Phương pháp AtomicReference
Sau đây là danh sách các phương thức quan trọng có sẵn trong lớp AtomicReference.
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | public boolean compareAndSet(V expect, V update) Đặt nguyên tử giá trị thành giá trị cập nhật nhất định nếu giá trị hiện tại == giá trị mong đợi. |
2 | public boolean get() Trả về giá trị hiện tại. |
3 | public boolean getAndSet(V newValue) Đặt nguyên tử thành giá trị đã cho và trả về giá trị trước đó. |
4 | public void lazySet(V newValue) Cuối cùng đặt thành giá trị đã cho. |
5 | public void set(V newValue) Đặt vô điều kiện đến giá trị đã cho. |
6 | public String toString() Trả về biểu diễn chuỗi của giá trị hiện tại. |
7 | public boolean weakCompareAndSet(V expect, V update) Đặt nguyên tử giá trị thành giá trị cập nhật nhất định nếu giá trị hiện tại == giá trị mong đợi. |
Thí dụ
Chương trình TestThread sau đây cho thấy cách sử dụng biến AtomicReference trong môi trường dựa trên luồng.
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());
}
}
Điều này sẽ tạo ra kết quả sau.
Đầu ra
Message is: hello
Atomic Reference of Message is: Thread 1