Happens Before的7個規則

2021-09-22 18:45:18 字數 565 閱讀 4607

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

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

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

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

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

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

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

Happens Before規則筆記

監視器鎖規則。在監視器鎖上的解鎖操作必須在同乙個監視器鎖上的加鎖操作之前執行。volatile 變數規則。對volatile變數的寫入操作必須在對該變數的讀操作之前執行 同樣適用與原子變數 執行緒結束規則。執行緒中的任何操作都必須在其他執行緒檢測到該執行緒已經結束之前執行,或者從thread.joi...

通俗易懂的Happens Before原則

1.執行順序原則,的執行順序,編寫在前面的發生在編寫在後面的之前 2.鎖原則,unlock後於lock 3.執行緒啟動原則,start方法優先於run方法 4.物件銷毀原則,初始化必須發生在finalize之前 6.volatile修飾的變數,寫操作優先於讀操作 7.傳遞性原則,操作a先於b,b先於...

多執行緒 happens before 先行發生原則

這8條規則中,前4條規則是比較重要的,後4條規則都是顯而易見的。下面我們來解釋一下前4條規則 對於程式次序規則來說,我的理解就是一段程式 的執行在單個執行緒中看起來是有序的。注意,雖然這條規則中提到 書寫在前面的操作先行發生於書寫在後面的操作 這個應該是程式看起來執行的順序是按照 順序執行的,因為虛...