Java Eş Zamanlılığı - AtomicLong Sınıfı

Bir java.util.concurrent.atomic.AtomicLong sınıfı, atomik olarak okunabilen ve yazılabilen temel uzun değer üzerinde işlemler sağlar ve ayrıca gelişmiş atomik işlemleri içerir. AtomicLong, temeldeki uzun değişken üzerinde atomik işlemleri destekler. Uçucu değişkenler üzerinde okuma ve yazma gibi çalışan alma ve ayarlama yöntemlerine sahiptir. Diğer bir deyişle, bir küme aynı değişken üzerindeki sonraki herhangi bir get ile önceden-olur ilişkisine sahiptir. Atomic CompareAndSet yöntemi de bu bellek tutarlılığı özelliklerine sahiptir.

AtomicLong Yöntemleri

AtomicLong sınıfında bulunan önemli yöntemlerin listesi aşağıdadır.

Sr.No. Yöntem ve Açıklama
1

public long addAndGet(long delta)

Verilen değeri atomik olarak mevcut değere ekler.

2

public boolean compareAndSet(long expect, long update)

Geçerli değer beklenen değerle aynıysa, değeri atomik olarak verilen güncellenmiş değere ayarlar.

3

public long decrementAndGet()

Mevcut değerden bir atomik olarak azalır.

4

public double doubleValue()

Belirtilen sayının değerini double olarak döndürür.

5

public float floatValue()

Belirtilen sayının değerini kayan nokta olarak döndürür.

6

public long get()

Mevcut değeri alır.

7

public long getAndAdd(long delta)

Atomik olarak verilen değeri mevcut değere ekler.

8

public long getAndDecrement()

Mevcut değerden bir atomik olarak azalır.

9

public long getAndIncrement()

Geçerli değerin bir katı kadar atomik olarak artar.

10

public long getAndSet(long newValue)

Atomik olarak verilen değere ayarlanır ve eski değeri döndürür.

11

public long incrementAndGet()

Geçerli değerin bir katı kadar atomik olarak artar.

12

public int intValue()

Belirtilen sayının değerini tamsayı olarak döndürür.

13

public void lazySet(long newValue)

Sonunda verilen değere ayarlar.

14

public long longValue()

Belirtilen sayının değerini uzun olarak döndürür.

15

public void set(long newValue)

Verilen değere ayarlar.

16

public String toString()

Geçerli değerin String temsilini döndürür.

17

public boolean weakCompareAndSet(long expect, long update)

Geçerli değer beklenen değerle aynıysa, değeri atomik olarak verilen güncellenmiş değere ayarlar.

Misal

Aşağıdaki TestThread programı, iş parçacığı tabanlı ortamda AtomicLong kullanan güvenli bir sayaç uygulamasını göstermektedir.

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());
   }
}

Bu, aşağıdaki sonucu verecektir.

Çıktı

Final number (should be 1000): 1000