Java Concurrency - AtomicLong-Klasse

Eine java.util.concurrent.atomic.AtomicLong-Klasse bietet Operationen für zugrunde liegende Long-Werte, die atomar gelesen und geschrieben werden können, und enthält auch erweiterte atomare Operationen. AtomicLong unterstützt atomare Operationen für zugrunde liegende Long-Variablen. Es verfügt über Methoden zum Abrufen und Festlegen, die wie das Lesen und Schreiben flüchtiger Variablen funktionieren. Das heißt, eine Menge hat eine Vorher-Beziehung zu einem nachfolgenden Abruf derselben Variablen. Die atomare compareAndSet-Methode verfügt auch über diese Speicherkonsistenzfunktionen.

AtomicLong-Methoden

Im Folgenden finden Sie eine Liste wichtiger Methoden, die in der AtomicLong-Klasse verfügbar sind.

Sr.Nr. Methode & Beschreibung
1

public long addAndGet(long delta)

Addiert atomar den angegebenen Wert zum aktuellen Wert.

2

public boolean compareAndSet(long expect, long update)

Setzt den Wert atomar auf den angegebenen aktualisierten Wert, wenn der aktuelle Wert dem erwarteten Wert entspricht.

3

public long decrementAndGet()

Verringert den aktuellen Wert atomar um eins.

4

public double doubleValue()

Gibt den Wert der angegebenen Zahl als Double zurück.

5

public float floatValue()

Gibt den Wert der angegebenen Zahl als Float zurück.

6

public long get()

Ruft den aktuellen Wert ab.

7

public long getAndAdd(long delta)

Atomiclly addiert den angegebenen Wert zum aktuellen Wert.

8

public long getAndDecrement()

Verringert den aktuellen Wert atomar um eins.

9

public long getAndIncrement()

Erhöht den aktuellen Wert atomar um eins.

10

public long getAndSet(long newValue)

Setzt atomar auf den angegebenen Wert und gibt den alten Wert zurück.

11

public long incrementAndGet()

Erhöht den aktuellen Wert atomar um eins.

12

public int intValue()

Gibt den Wert der angegebenen Zahl als int zurück.

13

public void lazySet(long newValue)

Setzt schließlich auf den angegebenen Wert.

14

public long longValue()

Gibt den Wert der angegebenen Zahl als long zurück.

15

public void set(long newValue)

Setzt auf den angegebenen Wert.

16

public String toString()

Gibt die String-Darstellung des aktuellen Werts zurück.

17

public boolean weakCompareAndSet(long expect, long update)

Setzt den Wert atomar auf den angegebenen aktualisierten Wert, wenn der aktuelle Wert dem erwarteten Wert entspricht.

Beispiel

Das folgende TestThread-Programm zeigt eine sichere Implementierung des Zählers mit AtomicLong in einer threadbasierten Umgebung.

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

Dies führt zu folgendem Ergebnis.

Ausgabe

Final number (should be 1000): 1000