volatile 키워드는 두 개의 스레드가 동일한 변수를 동시에 읽고 쓰는 멀티스레딩 환경에서 사용됩니다. volatile 키워드는 변경 사항을 CPU 캐시 대신 주 메모리로 직접 플러시합니다.
반면에 일시적인 키워드는 직렬화 중에 사용됩니다. 일시적으로 표시된 필드는 직렬화 및 역직렬화의 일부가 될 수 없습니다. 변수의 값을 저장하고 싶지 않은 경우 해당 변수와 함께 일시적인 키워드를 사용합니다.
| Sr. 아니요. | 키 | 휘발성 | 일시적 |
|---|---|---|---|
| 1 | 기본 | Volatile 키워드는 변경 사항을 주 메모리로 직접 플러시하는 데 사용됩니다. | transient 키워드는 직렬화 중에 변수를 제외하는 데 사용됩니다. |
| 2. | 기본값 | 휘발성은 기본값으로 초기화되지 않습니다. | 역직렬화 중에 일시적인 변수는 기본값으로 초기화됩니다. |
| 3 | 정적 | 휘발성은 정적 변수와 함께 사용할 수 있습니다. | Transient는 static 키워드와 함께 사용할 수 없습니다. |
| 4 | 최종 | Volatile은 final 키워드와 함께 사용할 수 있습니다. | transient는 final 키워드와 함께 사용할 수 없습니다. |
과도 현상의 예
// A sample class that uses transient keyword to
// skip their serialization.
class TransientExample implements Serializable {
transient int age;
// serialize other fields
private String name;
private String address;
// other code
} 휘발성의 예
class VolatileExmaple extends Thread{
boolean volatile isRunning = true;
public void run() {
long count=0;
while (isRunning) {
count++;
}
System.out.println("Thread terminated." + count);
}
public static void main(String[] args) throws InterruptedException {
VolatileExmaple t = new VolatileExmaple();
t.start();
Thread.sleep(2000);
t.isRunning = false;
t.join();
System.out.println("isRunning set to " + t.isRunning);
}
}