1. 程式人生 > >java併發程式設計之happens-before原則,先行發生原則

java併發程式設計之happens-before原則,先行發生原則

下文為自己學習筆記。

關鍵詞理解:

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()操作成功返回。