IT/Java

[Java] volatile 키워드

어린이개발자 2024. 12. 9. 19:56

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