JAVA volatile關鍵字學習筆記(1/2)

來源:互聯網
上載者:User

詳解

1.對volatile變數的讀寫有一個全域的排序,但是volatile變數跟常規變數的讀寫順序沒並沒有保證
2.volatile的值不會被緩衝,所有線程讀取到的都是當前的(主存中的)值
3.對volatile的變數的讀寫好像是用了synchronized包圍起來一樣

例

 代碼如下 複製代碼
package  linyumin.test.thread;     
/**    
 *     
 * @author llade    
 *    
 */     
public   class  VolatileObjectTest {     
    
    /**     
     * 成員變數boolValue使用volatile和不使用volatile會有明顯區別的。    
     * 本程式需要多試幾次,就能知道兩者之間的區別的。    
     * @param args    
     */     
    public   static   void  main(String[] args) {     
        final  VolatileObjectTest volObj= new  VolatileObjectTest();     
        Thread t1=new  Thread(){     
            public   void  run(){     
                System.out.println("t1 start" );     
                for (;;){     
                        volObj.waitToExit();     
                }     
            }     
        };     
        t1.start();     
        Thread t2=new  Thread(){     
            public   void  run(){     
                System.out.println("t2 start" );     
                for (;;){     
                    volObj.swap();     
                }     
            }     
        };     
        t2.start();     
    }     

     
    boolean  boolValue; //加上volatile 修飾的是時候,程式會很快退出,因為volatile 保證各個線程工作記憶體的變數值和主存一致。所以boolValue == !boolValue就成為了可能。       
    

 代碼如下 複製代碼
    public   void  waitToExit() {     
        if (boolValue == !boolValue)System.exit( 0 ); //非原子操作,理論上應該很快會被打斷。實際不是,因為此時的boolValue線上程自己內部的工作記憶體的拷貝,因為它不會強制和主存地區同步,線程2修改了boolValue很少有機會傳遞到線程一的工作記憶體中。所以照成了假的“原子現象”。      
    }     
         
    public   void  swap() { //不斷反覆修改boolValue,以期打斷線程t1.      
        boolValue = !boolValue;     
    }     
    
}  

 

首頁 1 2 末頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.