Java의 volatile은 멀티스레드 환경에서 변수의 가시성을 보장하고, 명령어 재정렬을 방지하기 위해 사용되는 키워드다. 런타임에서 자바의 변수는 일반적으로 각 스레드의 PC Register의 캐시 메모리(또는 작업 메모리)에 복사되어 효율적인 연산을 수행한다. 그러나 이 방식은 멀티스레드 환경에서 변수의 최신 상태를 다른 스레드가 즉시 확인하지 못하는 경우가 발생해, 일관성을 보장하지 못해 RaceCondition 같은 문제가 발생할 수 있다.Volatile 주요 기능가시성 보장volatile 변수에 대한 쓰기 작업이 발생하면 해당 값이 메인 메모리에 반영되고, 이로 인해 다른 스레드가 접근할 때 메인 메모리를 먼저 참조하여 캐시 메모리를 최신화하여, 이를 가시성을 보장한다고 한다.단일스레드 환경에..