Учебники

Параллелизм Java – класс AtomicBoolean

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

Атомно-булевы методы

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

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

public boolean compareAndSet (логическое ожидание, логическое обновление)

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

2

public boolean get ()

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

3

public boolean getAndSet (логическое новое значение)

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

4

public void lazySet (логическое новое значение)

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

5

открытый набор void (логическое значение newValue)

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

6

public String toString ()

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

7

public boolean weakCompareAndSet (логическое ожидание, логическое обновление)

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

public boolean compareAndSet (логическое ожидание, логическое обновление)

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

public boolean get ()

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

public boolean getAndSet (логическое новое значение)

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

public void lazySet (логическое новое значение)

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

открытый набор void (логическое значение newValue)

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

public String toString ()

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

public boolean weakCompareAndSet (логическое ожидание, логическое обновление)

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

пример

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

Live Demo

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

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