天天看點

Java記憶體模型之volatile的底層實作機制定義HOW ——> volatile 能提供可見性

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

Java記憶體模型之volatile的底層實作機制定義HOW ——> 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 能提供可見性)。然後我們就可以利用這個可見性大做文章,比如實作一個鎖等。

Java記憶體模型之volatile的底層實作機制定義HOW ——> volatile 能提供可見性

上面畫紅圈的表明,處理器對volatile 的實作不是對系統總線進行加鎖,而是對緩存加鎖。

Java記憶體模型之volatile的底層實作機制定義HOW ——> volatile 能提供可見性

上面是處理器對緩存加鎖的實作方式:

① 對緩存行加鎖内容的修改會導緻修改後的值馬上回寫記憶體

② 該處理器會阻止其他處理器緩存相同的内容(意思就是清空其他處理器中相同的值)

通過 ① ② 處理器的實作機制,java 中的volatile 就可以實作可見性了。

部落格内容參考自 《java 并發程式設計的藝術》第二章 volatile 的應用