死鎖指的是兩個線程都在等待另外一個線程釋放鎖,好比:線程T1獲取了鎖L1而後在等待獲取鎖L2,線程T2獲取了鎖L2而後在等待獲取鎖L1,這樣就產生了死鎖。嵌套管程鎖死指的是一個線程獲取鎖後在另外一個鎖上調用了wait進入等待另外一個線程發送喚醒信號,好比L:線程T1獲取了鎖L1而後在鎖L2上調用了wait方法,線程T2須要同時獲取鎖L1和L2才能向T1發送信號,這樣就產生了嵌套管程鎖死。線程
參考資料:get
嵌套管程鎖死it
嵌套管程鎖死 VS 死鎖io
嵌套管程鎖死與死鎖很像:都是線程最後被一直阻塞着互相等待。event
可是二者又不徹底相同。在死鎖中咱們已經對死鎖有了個大概的解釋,死鎖一般是由於兩個線程獲取鎖的順序不一致形成的,線程1鎖住A,等待獲取B,線程2已經獲取了B,再等待獲取A。如死鎖避免中所說的,死鎖能夠經過老是以相同的順序獲取鎖來避免。
可是發生嵌套管程鎖死時鎖獲取的順序是一致的。線程1得到A和B,而後釋放B,等待線程2的信號。線程2須要同時得到A和B,才能向線程1發送信號。因此,一個線程在等待喚醒,另外一個線程在等待想要的鎖被釋放。方法不一樣點概括以下:co
死鎖中,二個線程都在等待對方釋放鎖。 嵌套管程鎖死中,線程1持有鎖A,同時等待從線程2發來的信號,線程2須要鎖A來發信號給線程1。