Java Concurrency - Kelas AtomicReference
Kelas java.util.concurrent.atomic.AtomicReference menyediakan operasi pada referensi objek yang mendasari yang dapat dibaca dan ditulis secara atomik, dan juga berisi operasi atom tingkat lanjut. AtomicReference mendukung operasi atom pada variabel referensi objek yang mendasarinya. Ini telah mendapatkan dan menetapkan metode yang berfungsi seperti membaca dan menulis pada variabel volatil. Artinya, himpunan memiliki hubungan terjadi-sebelum dengan get berikutnya pada variabel yang sama. Metode atomic CompareAndSet juga memiliki fitur konsistensi memori ini.
Metode AtomicReference
Berikut adalah daftar metode penting yang tersedia di kelas AtomicReference.
Sr.No. | Metode & Deskripsi |
---|---|
1 | public boolean compareAndSet(V expect, V update) Secara atomis menetapkan nilai ke nilai pembaruan yang diberikan jika nilai saat ini == nilai yang diharapkan. |
2 | public boolean get() Mengembalikan nilai saat ini. |
3 | public boolean getAndSet(V newValue) Secara atomis disetel ke nilai yang diberikan dan mengembalikan nilai sebelumnya. |
4 | public void lazySet(V newValue) Akhirnya disetel ke nilai yang diberikan. |
5 | public void set(V newValue) Set tanpa syarat ke nilai yang diberikan. |
6 | public String toString() Mengembalikan representasi String dari nilai saat ini. |
7 | public boolean weakCompareAndSet(V expect, V update) Secara atomis menetapkan nilai ke nilai pembaruan yang diberikan jika nilai saat ini == nilai yang diharapkan. |
Contoh
Program TestThread berikut menunjukkan penggunaan variabel AtomicReference di lingkungan berbasis thread.
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());
}
}
Ini akan menghasilkan hasil sebagai berikut.
Keluaran
Message is: hello
Atomic Reference of Message is: Thread 1