happens-before

        happens-before規則簡單易懂,避免java程序員爲理解JMM提供的可見性保證而去學習複雜的重排序規則。       java

        在JMM(java內存模型)中,一個操做執行的結果須要對另外一個操做可見,那麼這兩個操做之間必需要存在happens-before關係。這裏提到的兩個操做既能夠是一個線程以內,也能夠是不一樣線程之間。程序員

  1.  程序順序原則:一個線程的每一個操做,happens-before於該線程中的任意後續操做。
  2. 監視器鎖原則:對一個鎖的解鎖操做,happens-before後續對這個鎖的加鎖操做。
  3. volatile變量原則:對一個volatile變量的寫操做,happens-before後續對這個變量的讀操做。
  4. 傳遞性:若是A happens-before B,B happens-before C,那麼A happens-before C。
  5. start()規則:若是線程A執行操做ThreadB.start()(啓動線程B),那麼線程A的threadB.start()操做happens-before於線程B中任意操做。
  6. 線程終止規則:線程的全部操做都happens-before對此線程的終止檢測。能夠經過Thread.join()方法結束、Thread.isAlive()的返回值等手段檢測到線程已經終止執行。
  7. 線程中斷規則:對線程interrupt()方法的調用先行發生於被中斷線程的代碼檢測到中斷事件的發生;
相關文章
相關標籤/搜索