13.10.1 volatile
- 코어에서 값을 읽을 때, 캐시가 아닌 메모리에서 데이터를 읽기 위해 사용
- 각 코어마다 캐시가 있기 때문에, 쓰레드 작업 시 메모리의 값만 변경하므로 캐시와 데이터 불일치 문제가 발생 할 수 있다
volatile boolean suspend = false;
- 원자화 : 32bit JVM기준으로 데이터를 4byte로 처리하기 때문에, long과 double과 같은 큰 데이터를 하나의 명령어로 처리할 수 없다. 때문에 두 개 이상의 명령어가 필요한데, 명령어를 통한 데이터를 읽는 과정에서 다른 쓰레드가 끼어 들 수 있어 데이터 불일치 문제가 발생 할 수 있다. 이를 해결하기위해 volatile 사용
volatile long a;
volatile double b;
- synchronized 블록은 캐시와 메모리를 동기화 시키기 때문에, 이를 사용해도 됨
public synchronized void stop(){
stopped = true;
}
'자바의 정석 정리' 카테고리의 다른 글
자바의 정석 - 15.1 입출력 및 스트림 (0) | 2022.08.30 |
---|---|
자바의 정석 - 13.11 fork & join 프레임워크 (0) | 2022.08.29 |
자바의 정석 - 13.9 쓰레드 동기화(Synchronized) (0) | 2022.08.29 |
자바의 정석 - 13.8 쓰레드 실행제어 (0) | 2022.08.29 |
자바의 정석 - 13.7 데몬 쓰레드(Daemon Thread) (0) | 2022.08.29 |