死锁产生的条件:两个或者多个线程相互占用对方想要请求的资源,就会产生死锁。
死锁的四个必要条件:
(1)互斥条件:同一时刻只有一个线程持有锁。
(2)请求与保持条件:一个线程因请求资源而阻塞,对已持有的资源保持不放。
(3)不可剥夺条件:线程在没有使用完自己持有的资源时,其它线程不能剥夺该线程的资源,只能有线程自己使用完释放资源。
(4)循环等待条件:若干线程之间头尾相接形成一种环形等待资源的关系。
避免死锁的方法:打破死锁的四个必要条件其中一个就可以避免死锁。
(1)互斥条件无法打破,因为锁本身就是互斥的。
(2)通过一次性请求所有资源可以打破请求与保持条件。
(3)允许线程强行从占有者那里获取某些资源可以打破不可剥夺条件。
(4)实行资源有序分配策略可以打破循环等待条件。
(5)锁排序法:线程只有获取A锁才能获取B锁。
如何进行死锁诊断:
当程序出现了死锁现象,我们可以使用jdk自带的工具:jps和 jstack。
标签:请求,互斥,死锁,线程,条件,资源 From: https://www.cnblogs.com/yhb-blogs/p/17439050.html