简单的说一说java线程中的死锁和嵌套管程锁死问题?

    死锁指的是两个线程都在等待另外一个线程释放锁,好比:线程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。
相关文章
相关标签/搜索