多线程:happens-before 先行发生原则
生活随笔
收集整理的這篇文章主要介紹了
多线程:happens-before 先行发生原则
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面就來具體介紹下happens-before原則(先行發生原則):
這8條規則中,前4條規則是比較重要的,后4條規則都是顯而易見的。
下面我們來解釋一下前4條規則:
對于程序次序規則來說,我的理解就是一段程序代碼的執行在單個線程中看起來是有序的。注意,雖然這條規則中提到“書寫在前面的操作先行發生于書寫在后面的操作”,這個應該是程序看起來執行的順序是按照代碼順序執行的,因為虛擬機可能會對程序代碼進行指令重排序。雖然進行重排序,但是最終執行的結果是與程序順序執行的結果一致的,它只會對不存在數據依賴性的指令進行重排序。因此,在單個線程中,程序執行看起來是有序執行的,這一點要注意理解。事實上,這個規則是用來保證程序在單線程中執行結果的正確性,但無法保證程序在多線程中執行的正確性。
指令重排序會導致在多線程情況下的有序性混亂,從而影響計算結果的正確性
第二條規則也比較容易理解,也就是說無論在單線程中還是多線程中,同一個鎖如果出于被鎖定的狀態,那么必須先對鎖進行了釋放操作,后面才能繼續進行lock操作。
第三條規則是一條比較重要的規則,也是后文將要重點講述的內容。直觀地解釋就是,如果一個線程先去寫一個變量,然后一個線程去進行讀取,那么寫入操作肯定會先行發生于讀操作。
第四條規則實際上就是體現happens-before原則具備傳遞性。
?
總結
以上是生活随笔為你收集整理的多线程:happens-before 先行发生原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二分查找算法总结
- 下一篇: JVM:JVM内存划分、主内存、工作内存