Java併發編程-happens-before

Java規範提案中(JSR-133)使用happens-before的概念來闡述操作之間的內存可見性。在JMM中,如果一個操作的執行結果需要對另外一個操作可見,那麼這兩個操作之間必須要勳在happens-before關係。兩個操作可以是在同一個線程之內,也可以是不同線程之間。

與寫代碼的人密切相關的happens-before規則如下:

  • 程序順序規則:一個線程中每個操作,happens-before於該線程中任意後續操作;
  • 監視器鎖規則:對一個鎖的解鎖,happens-before於隨後對這個鎖的加鎖;
  • volatile變量規則:對一個volatile域的寫,happens-before於任意後續對這個volatile域的讀;
  • 傳遞性:如果A happens-before B,且B happens-before C,那麼A happens-before C。

而對於JMM來說,happens-before約束着重排序規則。對於Java工程師來說,happens-before規則簡單易懂,它避免Java程序員爲理解JMM提供的內存可見性保證而去學習複雜的重排序規則以及這些規則的具體實現方法

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