백엔드 엔지니어 이재혁
[Java] 메모리 가시성 본문
volatile / 메모리 가시성
여러 스레드에서 접근하는 변수의 경우 volatile 키워드를 써줘야 안전하다.
메모리 가시성 문제: 멀티 스레드 환경에서, 같은 인스턴스에 대해, 어떤 스레드에서 변경한 값이 또 다른 스레드에서는 변경한 값으로 보이지 않는 문제가 발생하는 것
메모리 가시성 문제의 근본적인 원인은 CPU 코어에 있는 캐시 메모리에서 기인한다. 연관된 내용은 [CS] CPU 캐시 메모리의 흥미로운 점들 참조.
volatile 키워드를 사용하면, CPU의 캐시 메모리를 사용하지 않고, 메인 메모리를 사용하도록 강제하여, 모든 스레드가 같은 시점에 무조건 같은 데이터를 보도록 설정할 수 있다. 메인 메모리는 비교적 느리기 때문에 성능이 하락한다는 점은 감안하고 키워드를 사용해야 한다.
synchronized 키워드를 사용해 lock을 활용하는 것보다 비용(리소스 사용)이 적다고 한다. (동시접근까지 막으려면 synchronized 키워드를 사용해야 하는 듯)
'Java' 카테고리의 다른 글
| [Java] 생산자 소비자 문제 (0) | 2025.05.26 |
|---|---|
| [Java] concurrent.locks (0) | 2025.05.23 |
| [Java] synchronized (0) | 2025.05.22 |
| [Java] Runnable (0) | 2025.05.19 |
| [Java] Thread (0) | 2025.05.19 |