java面試題之什么是死鎖、活鎖、餓死和競態條件?


 

 

  • 死鎖:是指兩個或兩個以上的進程(或線程)在執行過程中,因爭奪資源而造成的一種相互等待的現象,若無外力作用,他們將無法推進下去;
  • 活鎖:是指兩個線程優先級相同,都禮讓不走,就這樣一直僵持下去;
  • 餓死:在單線程情況下,A、B兩個線程,A先執行;A在執行過程中,C線程來了,B讓C先執行;C在執行過程中,D線程來了,B也讓D先執行,就這樣B一直都是等待狀態。
  • 競態條件:多個線程競爭同一個變量,導致數據的不正確性,線程的訪問順序是不可控的,會影響最終的結果。

 

產生死鎖的必要條件:

1、互斥使用(資源獨占)

  一個資源每次只能給一個進程使用(比如寫操作)

2、占有且等待:

  進程在申請新的資源的同時,保持對原有資源的占有

3、不可搶占:

  資源申請者不能強行從資源占有者手動奪取資源,資源只能由占有者自願釋放

4、循環等待:

  A等待B占有的資源,B等待C占有的資源,C等待D占有的資源,..........N等待A的資源,形成一個線程等待回路


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM