java 語言規範對volatile 關鍵字的定義如下

比較重要的一句話是:a file may be declared volatile, in which case the java
memory model ensures that all threads see a consistent value for the variable.
了解起來就是,對聲明為 volatile 的屬性,jmm能確定所有線程對這個屬性看到的值是一緻的(也就是說 volatile 能提供可見性)。然後我們就可以利用這個可見性大做文章,比如實作一個鎖等。
上面畫紅圈的表明,處理器對volatile 的實作不是對系統總線進行加鎖,而是對緩存加鎖。
上面是處理器對緩存加鎖的實作方式:
① 對緩存行加鎖内容的修改會導緻修改後的值馬上回寫記憶體
② 該處理器會阻止其他處理器緩存相同的内容(意思就是清空其他處理器中相同的值)
通過 ① ② 處理器的實作機制,java 中的volatile 就可以實作可見性了。
部落格内容參考自 《java 并發程式設計的藝術》第二章 volatile 的應用