volatile 키워드는 자바에서 멀티쓰레드 환경에서 변수의 가시성(visibility)을 보장하는 데 사용됩니다. 멀티쓰레드 환경에서 여러 쓰레드가 동일한 변수를 읽고 쓰는 경우, 각 쓰레드는 로컬 캐시를 사용하여 변수의 값을 저장할 수 있습니다. 이로 인해 변수의 변경이 다른 쓰레드에게 즉시 반영되지 않을 수 있습니다.
volatile 변수를 선언하면 해당 변수에 대한 모든 읽기와 쓰기 연산이 메인 메모리에서 직접 이루어지게 됩니다. 따라서 volatile을 사용하면 변수의 가시성이 보장되며, 쓰레드 간의 데이터 일관성이 유지됩니다.
아래는 volatile을 사용하는 간단한 예제입니다.
public class SharedResource {
private volatile boolean flag = false;
public void setFlagTrue() {
flag = true;
}
public boolean isFlag() {
return flag;
}
}
이 예제에서 flag 변수는 volatile 키워드로 선언되었습니다. 이제 setFlagTrue 메서드에서 flag 값을 변경하면 이 변경이 메인 메모리에 즉시 반영됩니다. isFlag 메서드에서 flag 값을 읽을 때도 항상 메인 메모리에서 값을 읽게 됩니다.
volatile을 사용하는 것은 변수의 가시성만을 보장하며, 복합적인 연산에서는 동기화 메커니즘이 필요할 수 있습니다. 이는 volatile이 원자성(atomicity)을 보장하지 않기 때문입니다. 예를 들어, count++와 같은 연산은 volatile만으로 보장되지 않습니다. 이러한 경우에는 synchronized 또는 java.util.concurrent 패키지의 원자적 연산을 사용해야 합니다.
With ChatGPT
'JAVA > 포스팅' 카테고리의 다른 글
자바 쓰레드 fork 프레임웍 (0) | 2023.11.22 |
---|---|
자바 쓰레드 join 프레임웍 (0) | 2023.11.22 |
자바 쓰레드 Condition을 이용한 동기화 (0) | 2023.11.22 |
자바 쓰레드 Lock을 이용한 동기화 (0) | 2023.11.22 |
자바 쓰레드 Lock (0) | 2023.11.22 |