Учебники

Параллелизм Java — класс AtomicReference

Класс java.util.concurrent.atomic.AtomicReference предоставляет операции над базовой ссылкой на объект, которые можно читать и записывать атомарно, а также содержит расширенные атомарные операции. AtomicReference поддерживает атомарные операции с базовой переменной объекта. У него есть методы get и set, которые работают как чтение и запись по переменным переменным. То есть набор имеет отношение «происходит до» с любым последующим получением той же переменной. У атомарного метода compareAndSet также есть эти особенности согласованности памяти.

Методы AtomicReference

Ниже приведен список важных методов, доступных в классе AtomicReference.

Sr.No. Метод и описание
1

public boolean compareAndSet (ожидание, обновление V)

Атомно устанавливает значение для данного обновленного значения, если текущее значение == ожидаемое значение.

2

public boolean get ()

Возвращает текущее значение.

3

public boolean getAndSet (V newValue)

Атомно устанавливается на заданное значение и возвращает предыдущее значение.

4

public void lazySet (V newValue)

В конце концов устанавливается на заданное значение.

5

открытый набор void (V newValue)

Безусловно устанавливается на заданное значение.

6

public String toString ()

Возвращает строковое представление текущего значения.

7

public boolean weakCompareAndSet (ожидание, обновление V)

Атомно устанавливает значение для данного обновленного значения, если текущее значение == ожидаемое значение.

public boolean compareAndSet (ожидание, обновление V)

Атомно устанавливает значение для данного обновленного значения, если текущее значение == ожидаемое значение.

public boolean get ()

Возвращает текущее значение.

public boolean getAndSet (V newValue)

Атомно устанавливается на заданное значение и возвращает предыдущее значение.

public void lazySet (V newValue)

В конце концов устанавливается на заданное значение.

открытый набор void (V newValue)

Безусловно устанавливается на заданное значение.

public String toString ()

Возвращает строковое представление текущего значения.

public boolean weakCompareAndSet (ожидание, обновление V)

Атомно устанавливает значение для данного обновленного значения, если текущее значение == ожидаемое значение.

пример

Следующая программа TestThread показывает использование переменной AtomicReference в потоковой среде.

Live Demo

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

Это даст следующий результат.