Java學習疑點(5)–程式設計中如何避免死結問題的發生?

來源:互聯網
上載者:User

優秀的程式員總是不斷仔細琢磨每一行代碼及其所產生的衍生影響,所以優秀的代碼總是非常簡潔、高效。在編寫多線程同步代碼塊時我們必須要考慮到可能會產生的死結問題。一旦出現死結,相關線程就會進入無線等待的狀態,嚴重的可能導致整個程式無響應。通常情況下,死結問題非常隱蔽。在設計程式時,要對各線程之間鎖的等待關係進行詳細分析。

圖片來自互連網

 

死結的產生條件有四種,且必須同時滿足才可能會產生死結。

  1. 互斥條件:指對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程佔用。如果此時還有其它進程請求資源,則要求者只能等待,直至佔有資源的進程用畢釋放。
  2. 請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程佔有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。
  3. 不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
  4. 環路等待條件:指在發生死結時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1佔用的資源;P1正在等待P2佔用的資源,……,Pn正在等待已被P0佔用的資源。

 

既然知道了死結產生的必要條件,只要任意避免一個或者多個,就可避免死結的產生。我們可以通過設定一些限制措施,提前預防死結產生。關於檢測和解除死結,暫時且先不討論。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.