Java 에서 사용하는 volatile 키워드에 대해 정리하고자 한다.
1. volatile 이란?
- 코어가 변수의 값을 읽어올 때 캐시가 아닌 메모리에서 읽어오도록 변수 앞에 붙이는 키워드
2. 사용 목적
- 가시성을 보장한다.
(여기서 가시성이란, 공유 데이터를 사용한 다음 동기화 블록을 빠져나가고 나면 다른 스레드가 변경된 최신 값을 즉시 사용할 수 있게 해야 함을 의미한다.)
- 변수 접근에 대한 동기화가 큰 오버헤드를 발생시키는 상황에서 대안이 될 수 있다.
3. 한계
- 원자적 연산(읽기와 쓰기 작업이 단일 연산)에서만 사용 가능하다.
- 스레드를 차단하지 않기 때문에 복잡한 상태 관리에는 적합하지 않다.
4. synchronized 키워드와의 비교
- synchronized 키워드는 더 강력한 동기화 메커니즘으로, 가시성 뿐만 아니라 원자성 역시 보장한다.
- 다른 스레드가 synchronized 블록이나 메서드를 실행 중이라면, 대기 상태로 전환된다.
- volatile 키워드를 사용할 때보다 상대적으로 무겁고 느리다.
따라서 volatile 키워드는 단순한 변수의 상태 플래그를 관리할 때에 적합하고, synchronized 키워드는 여러 변수나 다양한 로직이 포함된 경우에 사용하는 것이 적합하다.
'IT > Java' 카테고리의 다른 글
[Java] JVM의 Garbage Collector (0) | 2023.05.21 |
---|---|
[JUnit] TDD를 편하게 하기 위한 JUnit 사용법 (0) | 2023.03.25 |
[Quartz] Quartz 스케줄러 적용의 건 (0) | 2023.01.13 |
2021-03-13 일지1 (0) | 2021.03.13 |
2021-03-11 일지1 (0) | 2021.03.11 |