1. 程式人生 > >java多執行緒之共享變數

java多執行緒之共享變數

目的:簡述java多執行緒的共享變數

 

共享變數:多個執行緒都會使用到的同一變數。

 

Q : 為什麼共享變數會造成資料的錯誤呢???

 

    A : 多個執行緒在操作共享變數的時候,不是直接在主記憶體中去操作的。而是都取一個共享變數的副本在工作記憶體去進行相關作。

 

下面舉例說明:有兩個執行緒同時操作一個共享變數(預設值是0),執行緒一,讓共享變數加2,執行緒二,讓共享變數減3。那麼結果應該是-1.

 

但實際可能是:執行緒一,拿到了主記憶體的資料(0),加2,還沒有同步到主記憶體

中去,執行緒二已經取出了主記憶體的資料(0),減3,這時候執行緒一,同步到主記憶體中去。資料變成2,然後執行緒二開始同步資料,資料變成-3。

 

 

解決辦法:volatile 和 synchronized 關鍵字。