天天看點

Java多線程-并發之多線程産生死鎖的4個必要條件?如何避免死鎖?多線程産生死鎖的4個必要條件?如何避免死鎖?

多線程産生死鎖的4個必要條件?

答:

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

如何避免死鎖?

答:

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

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

繼續閱讀