volatile 易變的。
核心:定義程序中變量值的可見範圍。
在C語言中,使用volatile關鍵字來定義變量的值變化被可見範圍。
由於程序訪問寄存器比訪問內存單元要快,因此,編譯器會作減少存取內存的優化,會造成讀髒數據的現象。
當使用volatile關鍵字修飾變量時,編譯器對訪問該變量的代碼就不再進行優化,從而可以提供對特殊地址的穩定訪問。
對變量的每一次操作(讀、寫)都會訪問內存地址,而不是操作緩存在寄存器中的變量。(深入瞭解)
在Java語言中,使用volatile關鍵字來定義變量的值的變化的影響範圍。
使用volatile修飾的變量的值變化可以被程序的其他部分可見,保證最新值可以被其他部分感知。
volatile不提供任何原子操作、同步、線程安全相關的機制,只保證變量值變化的可見範圍在內存單元。
如果實現安全的計數器,可以使用volatile和synchronized實現。(深入瞭解)
// thread safe counter
public class Counter {
private volatile int value; // allow visiable this value .
public int getValue() {
return value;
}
public synchronized int increment() { // write lock,
return value++;// read->alter->write
}
}