happens-before規則

來源:互聯網
上載者:User

標籤:程式   參考資料   nss   --   方法   targe   成功   final   vol   

happens-before原則:
  • happens-before它是判斷資料是否存在競爭、線程是否安全的主要依據。為了保證安全執行緒我們可以讓2個操作具有happens-before關係
  1. 如果一個操作happens-before與另一個操作,那麼第一個操作的結果將對第二個操作可見,而且第一個操作的執行順序在第二個操作之前,但這順序僅僅是對於程式員來說是這樣,實際執行並不一定。
  2. 如果2個操作重排序之後 執行的結果與happens-before規則執行的結果一樣則允許重排序。
happens-before的8條規則能夠保證存在happens-before規則的單一線程或者多條線程之中的2個操作是安全的。
  1. 程式順序規則:一個線程內,按照代碼順序,書寫在前面的操作先行發生於書寫在後面的操作。
  2. 監視器鎖規則:對一個鎖的解鎖,happens-before於隨後對這個鎖的加鎖。
  3. volatile變數規則:對一個volatile域的寫,happens-before於任意後續對這個volatile域的讀。
  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. join()規則:如果線程A執行操作ThreadB.join()並成功返回,那麼線程B中的任意操作happens-before於線程A從ThreadB.join()操作成功返回
  7. 線程終結規則:線程中所有的操作都先行發生於線程的終止檢測,我們可以通過Thread.join()方法結束、Thread.isAlive()的傳回值手段檢測到線程已經終止執行;
  8. 對象終結規則:一個對象的初始化完成先行發生於他的finalize()方法的開始;
參考資料
  1. 《Java並發編程的藝術》
  2. 【死磕Java並發】-----Java記憶體模型之happens-before

happens-before規則

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.