死锁

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

死锁的四个必要条件:

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

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

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

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

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

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

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

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

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

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

如何进行死锁诊断:

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

 

 

posted @   程序员_YHB  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示