天天看點

吃透Java并發四:Java記憶體模型

一、Java記憶體模型

Java記憶體模型的主要目标是定義程式中各個變量的通路規則,即在虛拟機中将變量存儲到記憶體和從記憶體中取出變量這樣的底層細節。此處的變量是指:執行個體字段、靜态字段和數組對象,但是不包括局部變量和方法參數,因為後者是線程私有的,不會被共享,自然不存在競争的問題。

Java記憶體模型規定了所有的變量都存儲在主記憶體中,每條線程還有自己的工作記憶體。線程的工作記憶體中儲存了被該線程使用到的變量的主記憶體副本拷貝,線程對變量的所有操作都必須在工作記憶體中進行,而不能直接讀寫主記憶體中的變量。不同的線程之間也無法直接通路對方工作記憶體中的變量,線程間變量值的傳遞均需要通過主記憶體來完成,線程、主記憶體、工作記憶體三者關系如下:

吃透Java并發四:Java記憶體模型

主記憶體和工作記憶體之間的互動

主記憶體與工作記憶體之間具體的互動協定,即一個變量如何從主記憶體拷貝到工作記憶體、如何從工作記憶體同步回主記憶體之類的實作細節,Java記憶體模型定義了以下八種操作來完成。

  • lock(鎖定):作用于主記憶體的變量,它把一個變量辨別為一條線程的獨占的狀态。
  • unlock(解鎖):作用于主記憶體的變量,它把一個處于鎖定狀态的變量釋放出來,釋放後的變量才可以被其它線程鎖定。
  • read&#

繼續閱讀