線程安全性-有序性

有序性:Java內存模型中,允許編譯器和處理器對指令進行重排序,但是重排序過程不會影響到單線程程序的運行,卻會影響到多線程併發執行的正確性。
Java中保證有序性:volatile、synchronized、Lock

有序性-happens-before原則
1)程序次序原則:一個線程內,按照代碼順序,書寫在前面的操作先行發生於書寫在後面的操作
2)鎖定規則:一個unlock操作先行發生於後面對於同一個鎖的lock操作。
3)volatile變量規則:對一個變量的寫操作先行發生於後面這個變量的讀操作。
4)傳遞規則:如果操作A先行發生於操作B,而操作B又先行發生於操作C,則可以得出操作A先行發生於操作C
5)線程啓動規則:Thread對象的start()方法先行發生於此線程的每一個動作(即一個線程要先執行start方法,才能執行此線程的其他動作)
6)線程中斷規則:對線程interrupt()方法的調用先行發生於被中斷線程的代碼檢測到的中斷事件的發生
7)線程終結規則:線程中所有的操作都先行發生於線程終止檢測,我們可以通過Thread.join()方法結束、Thread.isAlive()的返回值手段檢測到線程已經終止執行
8)對象終結規則:一個對象的初始化完成先行發生於他的finalize()方法的開始
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章