JVM的八大原子指令

2022-07-06 16:27:09 字數 1154 閱讀 1572

lock(鎖定):作用於主記憶體的變數,把乙個變數標記為一條執行緒獨佔狀態

unlock(解鎖):作用於主記憶體的變數,把乙個處於鎖定狀態的變數釋放出來,釋放後的變數才可以被其他執行緒鎖定

read(讀取):作用於主記憶體的變數,把乙個變數值從主記憶體傳輸到執行緒的工作記憶體中,以便隨後的load動作使用

load(載入):作用於工作記憶體的變數,它把read操作從主記憶體中得到的變數值放入工作記憶體的變數副本中

use(使用):作用於工作記憶體的變數,把工作記憶體中的乙個變數值傳遞給執行引擎

assign(賦值):作用於工作記憶體的變數,它把乙個從執行引擎接收到的值賦給工作記憶體的變數

store(儲存):作用於工作記憶體的變數,把工作記憶體中的乙個變數的值傳送到主記憶體中,以便隨後的write的操作

write(寫入):作用於工作記憶體的變數,它把store操作從工作記憶體中的乙個變數的值傳送到主記憶體的變數中

一張圖整明白:

1)不允許乙個執行緒無原因地(沒有發生過任何assign操作)把資料從工作記憶體同步會主記憶體中

2)乙個新的變數只能在主記憶體中誕生,不允許在工作記憶體中直接使用乙個未被初始化(load或者assign)的變數。即就是對乙個變數實施use和store操作之前,必須先自行assign和load操作。

3)乙個變數在同一時刻只允許一條執行緒對其進行lock操作,但lock操作可以被同一執行緒重複執行多次,多次執行lock後,只有執行相同次數的unlock操作,變數才會被解鎖。lock和unlock必須成對出現。

4)如果對乙個變數執行lock操作,將會清空工作記憶體中此變數的值,在執行引擎使用這個變數之前需要重新執行load或assign操作初始化變數的值。

5)如果乙個變數事先沒有被lock操作鎖定,則不允許對它執行unlock操作;也不允許去unlock乙個被其他執行緒鎖定的變數。

6)對乙個變數執行unlock操作之前,必須先把此變數同步到主記憶體中(執行store和write操作)

spring事務失效的八大原因

一 資料庫引擎不支援事務 以 mysql 為例,其 myisam 引擎是不支援事務操作的,innodb 才是支援事務的引擎 從 mysql 5.5.5 開始的預設儲存引擎是 innodb,之前預設的都是 myisam 二 沒有被 spring 管理 如果此時把 service註解注釋掉,這個類就不會...

做人應堅持的八大原則

1共贏 幫助他人成功,有利益放到桌面上跟別人一起分享並讓對方驚喜。答謝幫助過自己的人.2誠信 3信譽 要把自己的名聲看得跟生命一樣重要。答應別人的事情一定做到,永遠不要做可能損害自己名聲的事情 4健康 每天堅持鍛鍊身體 5進取 不斷學習各種最佳實踐,自省,學習身邊每個人的優點,向別人徵求自己的缺點,...

GeekBand設計模式八大原則總結

物件導向設計原則 1 依賴倒置原則 dip 高層模組 穩定 不應該依賴於底層模組 變化 二者都應該依賴於抽象 穩定 抽象 穩定 不應該依賴與實現細節 變化 實現細節應該依賴於抽象 穩定 物件導向設計原則 2 開放封閉原則 ocp 對擴充套件開放,對更改封閉。類模組應該是可擴充套件的,但是不可修改。物...