java記憶體模型

2021-09-12 23:11:24 字數 537 閱讀 5011

程式次序規則:在乙個執行緒內,按照程式**順序,書寫在前面的操作先行發生於書寫在後面的操作。準確地說,應該是控制流順序而不是程式**順序,因為要考慮分支、迴圈等結構。

管程鎖定規則:乙個unlock操作先行發生於後面對同乙個鎖的lock操作。這裡必須強調的是同乙個鎖,而"後面"是指時間上的先後順序。

volatile變數規則:對乙個volatile變數的寫操作先行發生於後面對這個變數的讀操作,這裡的"後面"同樣是指時間上的先後順序。

執行緒啟動規則:thread物件的start()方法先行發生於此執行緒的每乙個動作。

執行緒終止規則:執行緒中的所有操作都先行發生於對此執行緒的終止檢測,我們可以通過thread.join()方法結束、thread.isalive()的返回值等手段檢測到執行緒已經終止執行。

執行緒中斷規則:對執行緒interrupt()方法的呼叫先行發生於被中斷執行緒的**檢測到中斷事件的發生,可以通過thread.interrupted()方法檢測到是否有中斷發生。

物件終結規則:乙個物件的初始化完成(建構函式執行結束)先行發生於它的finalize()方法的開始。

java記憶體模型

一 原子性 原子性是指乙個操作是不可中斷的,即使是多個執行緒一起執行的時候,乙個操作的開始,就不會被其他執行緒干擾 那麼有人會想到 i 是原子操作嗎?答案肯定不是。因為i 至少包含兩個操作,讀 從記憶體中讀出來 和行為 加上去 還有可能把加完後的資料在方法到i裡面去,出來也是1,這兩個執行緒同時進行...

Java記憶體模型

1.首先,執行緒a把本地記憶體a中更新過的共享變數重新整理到主記憶體中去。2.然後,執行緒b到主記憶體中去讀取執行緒a之前已更新過的共享變數。1.共享物件對各個執行緒的可見性 2.共享物件的競爭現象 指令級並行的重排序 如果不存l在資料依賴性,處理器可以改變語句對應機器指令的執行順序。記憶體系統的重...

Java記憶體模型

int x 0 thread a int y x thread bint x 5 int y 8 int z x y 關於上面的 存在這樣關係 x和z之間存在資料依賴關係,同時y和z之間也存在資料依賴關係。為了得到正確的結果,執行指令序列時,z不能重排序到x和y的前面。但是x和y之間並沒有資料依賴關...