happens-before是什麼?

原文鏈接:https://blog.csdn.net/zjw_mzone/article/details/83999316

https://blog.csdn.net/zjw_mzone/article/details/83999316

https://blog.csdn.net/qqqqq1993qqqqq/article/details/75285899

happens-before的規則

1)程序順序規則:一個線程中的每個操作,happens-before於該線程中的任意後續操作。
2)監視器鎖規則:對一個鎖的解鎖,happens-before於隨後對這個鎖的加鎖。
3)volatile變量規則:對一個volatile域的寫,happens-before於任意後續對這個volatile域的讀。
4)傳遞性:如果A happens-before B,且B happens-before C,那麼A happens-before C。
5)start()規則:如果線程A執行操作ThreadB.start()(啓動線程B),那麼A線程的ThreadB.start()操作happens-before於線程B中的任意操作。
6)join()規則:如果線程A執行操作ThreadB.join()併成功返回,那麼線程B中的任意操作happens-before於線程A從ThreadB.join()操作成功返回。

 

程序次序規則:在一個線程內一段代碼的執行結果是有序的。就是還會指令重排,但是隨便它怎麼排,結果是按照我們代碼的順序生成的不會變!

管程鎖定規則:就是無論是在單線程環境還是多線程環境,對於同一個鎖來說,一個線程對這個鎖解鎖之後,另一個線程獲取了這個鎖都能看到前一個線程的操作結果!(管程是一種通用的同步原語,synchronized就是管程的實現)

volatile變量規則:就是如果一個線程先去寫一個volatile變量,然後一個線程去讀這個變量,那麼這個寫操作的結果一定對讀的這個線程可見。

線程啓動規則:在主線程A執行過程中,啓動子線程B,那麼線程A在啓動子線程B之前對共享變量的修改結果對線程B可見。

線程終止規則:在主線程A執行過程中,子線程B終止,那麼線程B在終止之前對共享變量的修改結果在線程A中可見。

線程中斷規則:對線程interrupt()方法的調用先行發生於被中斷線程代碼檢測到中斷事件的發生,可以通過Thread.interrupted()檢測到是否發生中斷。

傳遞規則:這個簡單的,就是happens-before原則具有傳遞性,即A happens-before B , B happens-before C,那麼A happens-before C。

對象終結規則:這個也簡單的,就是一個對象的初始化的完成,也就是構造函數執行的結束一定 happens-before它的finalize()方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章