자바 동시성-AtomicBoolean 클래스

java.util.concurrent.atomic.AtomicBoolean 클래스는 원자 적으로 읽고 쓸 수 있고 고급 원자 연산도 포함하는 기본 부울 값에 대한 연산을 제공합니다. AtomicBoolean은 기본 부울 변수에 대한 원자 연산을 지원합니다. 휘발성 변수에 대한 읽기 및 쓰기처럼 작동하는 get 및 set 메서드가 있습니다. 즉, 세트는 동일한 변수에 대한 후속 get과 사전 발생 관계를 갖습니다. 원자 적 compareAndSet 메서드에는 이러한 메모리 일관성 기능도 있습니다.

AtomicBoolean 메서드

다음은 AtomicBoolean 클래스에서 사용할 수있는 중요한 메서드 목록입니다.

Sr. 아니. 방법 및 설명
1

public boolean compareAndSet(boolean expect, boolean update)

현재 값 == 예상 값인 경우 값을 지정된 업데이트 된 값으로 원자 적으로 설정합니다.

2

public boolean get()

현재 값을 반환합니다.

public boolean getAndSet(boolean newValue)

원자 적으로 주어진 값으로 설정하고 이전 값을 반환합니다.

4

public void lazySet(boolean newValue)

결국 주어진 값으로 설정됩니다.

5

public void set(boolean newValue)

주어진 값으로 무조건 설정합니다.

6

public String toString()

현재 값의 문자열 표현을 반환합니다.

7

public boolean weakCompareAndSet(boolean expect, boolean update)

현재 값 == 예상 값인 경우 값을 지정된 업데이트 된 값으로 원자 적으로 설정합니다.

다음 TestThread 프로그램은 스레드 기반 환경에서 AtomicBoolean 변수의 사용법을 보여줍니다.

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

그러면 다음과 같은 결과가 생성됩니다.

산출

Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Thread 2, Atomic Variable: false
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Thread 2 is setting the variable to true
Thread 2, Atomic Variable: true
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false
Done!