본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

volatile, 공유 변수의 가시성을 보장하다

`volatile` 키워드는 자바에서 멀티스레드 환경에서 공유 변수의 가시성을 보장하기 위해 사용된다.
`volatile`로 선언된 변수는 메인 메모리에서 직접 읽기 및 쓰기가 이루어지며
스레드가 변수를 읽을 때마다 항상 가장 최신의 값이 제공된다.
이를 통해 스레드 간의 변수 값의 일관성을 유지할 수 있다.


예시 코드에서는 `volatile` 키워드가 적용된 `flag` 변수를 사용하여 두 개의 스레드가 서로 상태를 공유한다.
스레드 1은 `toggleFlag()` 메서드를 호출하여 `flag` 값을 변경하고, 
스레드 2는 `isFlag()` 메서드를 호출하여 `flag` 값을 확인한다.
`flag` 변수가 `volatile`로 선언되었기 때문에 스레드 2에서는 항상 스레드 1에서 변경한 가장 최신의 `flag` 값이 제공된다.

public class VolatileExample {
    private volatile boolean flag = false;

    public void toggleFlag() {
        flag = !flag;
    }

    public boolean isFlag() {
        return flag;
    }

    public static void main(String[] args) {
        VolatileExample example = new VolatileExample();

        // 스레드 1: flag 값 변경
        Thread thread1 = new Thread(() -> {
            example.toggleFlag();
            System.out.println("Flag is toggled.");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });

        // 스레드 2: flag 값 확인
        Thread thread2 = new Thread(() -> {
            while (!example.isFlag()) {
                // flag가 true가 될 때까지 대기
            }
            System.out.println("Flag is true.");
        });

        thread1.start();
        thread2.start();
    }
}

출력결과 예시:
Flag is toggled.
Flag is true.