1. 程式人生 > >java面試題之什麼是死鎖、活鎖、餓死和競態條件?

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的資源,形成一個執行緒等待迴路