可見性: 一個縣城對共享變量的修改,另外一個線程可以馬上看到。java
volatile的意義時禁用CPU緩存緩存
public class VolatileExample { int x = 0; volatile boolean v = false; public void writer(){ x = 42; v = true; } public void reader(){ if (v){ System.out.println(x); } }
假設線程A執行writer()方法,按照 volatile語義,會把變量 「v=true」 寫入內存;假 設線程B執行reader()方法,一樣按照 volatile 語義,線程B會從內存中讀取變量v,若是線程B看到 「v == true」 時,那麼線程B看到的變量x是多少呢?併發
1.5之前的版本會出現x=0的狀況由於變量x可能被CPU緩存而致使 可見性問題。這個問題在1.5版本已經被圓滿解決了。x=42,爲何呢?工具
若是線程B讀到了「v=true」,那麼線程A設置的「x=42」對線程B是可見的。也就是說,線程B能看到 「x == 42」 ,有沒有一種恍然大悟的感受?這就是1.5版本對volatile語義的加強,這個加強意義重大,1.5版本 的併發工具包(java.util.concurrent)就是靠volatile語義來搞定可見性的。線程
**** 碼字不易若是對你有幫助請給個關注****code
**** 愛技術愛生活 QQ羣: 894109590****blog