java併發程式設計之happens-before原則,先行發生原則
阿新 • • 發佈:2018-11-09
下文為自己學習筆記。
關鍵詞理解:
JMM:java memory model java記憶體模型
int a=1;//A
int b=3;//B
int c=a*b;//C
在上邊這段程式碼中,有A\B\C個語句
C依賴於A、B兩個語句,所以Ahappens-before於C,Bhappens-before於C,但是A和B之間沒有依賴關係,先執行A或者先執行B對程式結果沒有影響。
總結happens-before規則是:如果A happens-before C,那麼Java記憶體模型將向程式設計師保證——A操作的結果將對C可見,且A的執行順序排在C之前。
hanppens-before規則
1、程式順序規則:一個執行緒中的每個操作,happens-before於該執行緒中的任意後續操作。
2、監視器鎖規則:對一個鎖的解鎖,happens-before於隨後對這個鎖的加鎖。
3、volatile變數規則:與一個volatile域的寫,happens-before於任意後續對這個volatile域的讀。
4、傳遞性:如果Ahappens-beforeB,且Bhappens-beforeC,那麼Ahappens-beforeC
5、start規則:如果執行緒A執行操作ThreadB.start()(啟動執行緒B),那麼A執行緒的ThreadB.start()操作happens-before與執行緒B中的任意操作。
6、join規則:如果執行緒A執行操作ThreadB.join()併成功返回,那麼執行緒B中的任意操作happens-before於執行緒A從ThreadB.join()操作成功返回。