Java volatile關鍵字-禁用CPU緩存

可見性: 一個縣城對共享變量的修改,另外一個線程可以馬上看到。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

相關文章
相關標籤/搜索