【Java內存模型】02 Java 內存模型 同步操作、同步規則

一、同步八種操作

1、lock(鎖定): 作用於主內存的變量,把一個變量標識爲一條線程獨佔狀態

2、unlock(解鎖): 作用於主內存的變量,把一個處於鎖定狀態的變量釋放出來,釋放後的變量纔可以被其他線程鎖定。

3、read(讀取): 作用於主內存的變量,把一個變量值從主內存傳輸到線程的工作內存中,方便線程load動作使用。

4、load(載入): 作用於工作內存的變量,它把read操作從主內存中得到的變量值放入工作內存的變量副本中。

5、use(使用): 作用於工作內存的變量,把工作內存這篇的一個變量值傳遞給執行引擎。

6、assign(賦值): 作用於工作內存的變量,它把一個從執行引擎接收到的值賦值給工作內存的變量。

7、store(存儲): 作用於工作內存的變量,把工作內存中的一個變量的值傳送到主內存中,方便write操作

8、write(寫入): 作用於主內存的變量,它把store操作從工作內存中的一個變量值傳送到主內存的變量中

二、同步規則

1、如果要把一個變量從主內存中賦值到工作內存,就需要按順序地執行read 和load 操作,如果把變量從工作內存中同步回主內存中,就要順序地執行store和write 操作。java內存模型只要求按順序執行並沒有保證必須連續。

2、不允許read 、load 、store 、write操作之一單獨出現

3、不允許一個線程丟棄它的最近assigin 的操作,即變量在工作內存中改變了之後必須同步到主內存中

4、不允許一個線程無原因地(沒有發生過任何assigin操作)把數據從工作內存同步回主內存中

5、一個新的變量只能在主內存中誕生,不允許在工作內存中直接使用一個未被初始化(load assign)的變量。即對一個變量實施use 和store 操作之前,必須先執行過assign 和load 操作

6、一個變量在同一時刻只允許一條線程對變量進行lock操作,但lock操作可以被同一條線程重複執行多次。多次執行lock後,只有執行相同次數的unlock操作,變量纔會被解鎖。lock 和unlock必須成對出現

7、如果對一個變量執行lock操作,將會清空工作內存中此變量的值,在執行引擎使用這個變量前要重新執行load或assigin操作初始化變量的值。

8、如果一個變量事先沒有被lock操作鎖定,則不允許對它執行unlock操作;也不允許unlock一個被其他線程鎖定的變量。

9、對一個變量執行unlock操作之前,必須先把此變量同步到主內存中(執行store和write操作)

read
write
load
store
use
assign
主內存
Save and Load
工作內存
java線程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章