多線程併發-淺談線程安全之有序性

在單線程的情況下可以保證線程的有序性。

但是在多線程保持有序性必須遵守happens-before

jmm定義了保持有序性必須遵守happens-before原則。

 

happens-before:

1.程序次序規則:一個線程內,按照代碼順序,書寫在前面的操作先行發生於書寫在後面的操作

2.鎖定規則:一個unlock操作先行發生於後面對同一個鎖的lock操作

3.volatile變量規則:對一個變量的寫操作先行發生於後面對這個變量的讀操作(簡單地說就是讀這個變量前先進行對這個變量的寫操作)

4.傳遞規則:如果操作A先行發生於操作B,而操作B又先行發生於操作C,則可以得出操作A先行發生於操作C(這個很容易理解)

5.線程啓動規則:Thread對象的start方法先行發生於此線程的每一個動作

6.線程中斷規則:對線程interrupt()方法的調用先行發生於被中斷線程的代碼檢測到中斷事件的發生

7.線程終結規則:線程中所有的操作都先行發生於線程的終止檢測,我們可以通過Thread.join()方法結束,Thread.isAlive的返回值手段檢測到線程已經終止執行

8.對象終結規則:一個對象的初始化完成先行發生於他的finalize()方法的開始

 

前四個比較重要  

以上

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