여러 개의 스레드에서 특정 객체를 동시에 사용하려 할 때 섞이지 않고 안전하게 동작하도록 객체를 공유하고 공개하는 방법

소스코드의 특정 블록을 동기화시키고자 할 때는 항상 메모리 가시성 문제가 발생한다.

3.1 가시성

메모리 상의 공유된 변수를 여러 스레드에서 서로 사용할 수 있게 하려면 반드시 동기화 기능을 구현해야 한다.

3.1.1 스테일 데이터

변수를 사용하는 모든 경우에 동기화를 시켜두지 않으면 해당 변수에 대한 최신 값이 아닌 다른 값을 사용하게 되는 경우가 발생할 수 있다.

3.1.2 단일하지 않은 64비트 연산

동기화되지 않은 상태에서 특정 스레드가 변수의 값을 읽으려하면 스테일 상태의 값을 읽어갈 가능성이 있지만, 64비트를 사용하는 숫자형 (double, long) 에 volatile 을 사용하지 않으면 난데없는 값마저 생길 가능성이 있다.