Java Concurrency - Kelas AtomicLong

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

Berikut adalah daftar metode penting yang tersedia di kelas AtomicLong.

Sr.No. Metode & Deskripsi
1

public long addAndGet(long delta)

Secara atomis menambahkan nilai yang diberikan ke nilai saat ini.

2

public boolean compareAndSet(long expect, long update)

Secara atomis menetapkan nilai ke nilai yang diperbarui jika nilai saat ini sama dengan nilai yang diharapkan.

3

public long decrementAndGet()

Secara atomik mengurangi satu nilai saat ini.

4

public double doubleValue()

Mengembalikan nilai dari angka yang ditentukan sebagai ganda.

5

public float floatValue()

Mengembalikan nilai dari angka yang ditentukan sebagai float.

6

public long get()

Mendapat nilai saat ini.

7

public long getAndAdd(long delta)

Secara atomiclly menambahkan nilai yang diberikan ke nilai saat ini.

8

public long getAndDecrement()

Secara atomik mengurangi satu nilai saat ini.

9

public long getAndIncrement()

Secara atomis bertambah satu nilai saat ini.

10

public long getAndSet(long newValue)

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

11

public long incrementAndGet()

Secara atomis bertambah satu nilai saat ini.

12

public int intValue()

Mengembalikan nilai dari angka yang ditentukan sebagai int.

13

public void lazySet(long newValue)

Akhirnya disetel ke nilai yang diberikan.

14

public long longValue()

Mengembalikan nilai dari angka yang ditentukan sebagai panjang.

15

public void set(long newValue)

Set ke nilai yang diberikan.

16

public String toString()

Mengembalikan representasi String dari nilai saat ini.

17

public boolean weakCompareAndSet(long expect, long update)

Secara atomis menetapkan nilai ke nilai yang diperbarui jika nilai saat ini sama dengan nilai yang diharapkan.

Contoh

Program TestThread berikut menunjukkan implementasi penghitung yang aman menggunakan AtomicLong di lingkungan berbasis utas.

import java.util.concurrent.atomic.AtomicLong;

public class TestThread {

   static class Counter {
      private AtomicLong c = new AtomicLong(0);

      public void increment() {
         c.getAndIncrement();
      }

      public long value() {
         return c.get();
      }
   }

   public static void main(final String[] arguments) throws InterruptedException {
      final Counter counter = new Counter();
      
      //1000 threads
      for(int i = 0; i < 1000 ; i++) {
         
         new Thread(new Runnable() {
            
            public void run() {
               counter.increment();
            }
         }).start();	
      }
      Thread.sleep(6000);			   		  
      System.out.println("Final number (should be 1000): " + counter.value());
   }
}

Ini akan menghasilkan hasil sebagai berikut.

Keluaran

Final number (should be 1000): 1000