Java Concurrency - Kelas AtomicBoolean

Kelas java.util.concurrent.atomic.AtomicBoolean menyediakan operasi pada nilai boolean yang mendasari yang dapat dibaca dan ditulis secara atomik, dan juga berisi operasi atom tingkat lanjut. AtomicBoolean mendukung operasi atom pada variabel boolean 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 AtomicBoolean

Berikut adalah daftar metode penting yang tersedia di kelas AtomicBoolean.

Sr.No. Metode & Deskripsi
1

public boolean compareAndSet(boolean expect, boolean 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(boolean newValue)

Secara atomis disetel ke nilai yang diberikan dan mengembalikan nilai sebelumnya.

4

public void lazySet(boolean newValue)

Akhirnya disetel ke nilai yang diberikan.

5

public void set(boolean newValue)

Set tanpa syarat ke nilai yang diberikan.

6

public String toString()

Mengembalikan representasi String dari nilai saat ini.

7

public boolean weakCompareAndSet(boolean expect, boolean update)

Secara atomis menetapkan nilai ke nilai pembaruan yang diberikan jika nilai saat ini == nilai yang diharapkan.

Contoh

Program TestThread berikut menunjukkan penggunaan variabel AtomicBoolean di lingkungan berbasis thread.

import java.util.concurrent.atomic.AtomicBoolean;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final AtomicBoolean atomicBoolean = new AtomicBoolean(false);

      new Thread("Thread 1") {

         public void run() {

            while(true) {
               System.out.println(Thread.currentThread().getName() 
                  +" Waiting for Thread 2 to set Atomic variable to true. Current value is "
                  + atomicBoolean.get());

               if(atomicBoolean.compareAndSet(true, false)) {
                  System.out.println("Done!");
                  break;
               }
            }
         };
      }.start();

      new Thread("Thread 2") {

         public void run() {
            System.out.println(Thread.currentThread().getName() +
               ", Atomic Variable: " +atomicBoolean.get()); 
            System.out.println(Thread.currentThread().getName() +
               " is setting the variable to true ");
            atomicBoolean.set(true);
            System.out.println(Thread.currentThread().getName() +
               ", Atomic Variable: " +atomicBoolean.get()); 
         };
      }.start();
   }
}

Ini akan menghasilkan hasil sebagai berikut.

Keluaran

Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Thread 2, Atomic Variable: false
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Thread 2 is setting the variable to true
Thread 2, Atomic Variable: true
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Done!