[Java] volatile 키워드

정리


volatile 변수

  • 값을 변경 시 다른 스레드에서 항상 최신 값을 읽어갈 수 있도록 해준다.
    • 메인 메모리에서만 접근하므로..
  • 쓰레드 로컬에서 캐싱되지 않는다.
  • synchronized 블럭과 같은 기능을 제공
  • 컴파일러와 런타임 모두 “이 변수는 공유해 사용하고 따라서 실행순서를 재배치해서는 안된다.” 라고 인식

사용예

  • 변수에 값을 저장하는 작업이 해당 변수의 현재 값과 관련이 없거나 해당 변수의 값을 변경하는 스레드가 하나만 존재.
  • 해당 변수가 객체의 불변조건을 이루는 다른 변수와 달리 불변조건에 관련되어 있지 않음.
  • 해당 변수를 사용하는 동안에는 어떤 경우라도 락을 걸어 둘 필요가 없는 경우.

참고