1. 程式人生 > >Java多執行緒-併發之多執行緒產生死鎖的4個必要條件?如何避免死鎖?

Java多執行緒-併發之多執行緒產生死鎖的4個必要條件?如何避免死鎖?

多執行緒產生死鎖的4個必要條件?

答:

  1. 互斥條件:一個資源每次只能被一個執行緒使用
  2. 請求與保持條件:一個執行緒因請求資源而阻塞時,對已獲得的資源保持不放
  3. 不剝奪條件:程序已經獲得的資源,在未使用完之前,不能強行剝奪
  4. 迴圈等待條件:若干執行緒之間形成一種頭尾相接的迴圈等待資源關係

如何避免死鎖?

答:

指定獲取鎖的順序,舉例:

  1. 比如某個執行緒只有獲得 A 鎖和 B 鎖才能對某資源進行操作,在多執行緒條件下,如何避免死鎖?
  2. 獲得鎖的順序是一定的,比如規定只有獲得 A 鎖的執行緒才有資格獲取 B 鎖,按順序獲取鎖就可以避免死鎖。