死锁

死锁产生的条件:两个或者多个线程相互占用对方想要请求的资源,就会产生死锁。

死锁的四个必要条件:

(1)互斥条件:同一时刻只有一个线程持有锁。

(2)请求与保持条件:一个线程因请求资源而阻塞,对已持有的资源保持不放。

(3)不可剥夺条件:线程在没有使用完自己持有的资源时,其它线程不能剥夺该线程的资源,只能有线程自己使用完释放资源。

(4)循环等待条件:若干线程之间头尾相接形成一种环形等待资源的关系。

避免死锁的方法:打破死锁的四个必要条件其中一个就可以避免死锁。

(1)互斥条件无法打破,因为锁本身就是互斥的。

(2)通过一次性请求所有资源可以打破请求与保持条件。

(3)允许线程强行从占有者那里获取某些资源可以打破不可剥夺条件。

(4)实行资源有序分配策略可以打破循环等待条件。

(5)锁排序法:线程只有获取A锁才能获取B锁。

如何进行死锁诊断:

当程序出现了死锁现象,我们可以使用jdk自带的工具:jps和 jstack。

 

 

posted @ 2023-05-28 22:39  程序员_YHB  阅读(26)  评论(0)    收藏  举报