死锁
死锁产生的条件:两个或者多个线程相互占用对方想要请求的资源,就会产生死锁。
死锁的四个必要条件:
(1)互斥条件:同一时刻只有一个线程持有锁。
(2)请求与保持条件:一个线程因请求资源而阻塞,对已持有的资源保持不放。
(3)不可剥夺条件:线程在没有使用完自己持有的资源时,其它线程不能剥夺该线程的资源,只能有线程自己使用完释放资源。
(4)循环等待条件:若干线程之间头尾相接形成一种环形等待资源的关系。
避免死锁的方法:打破死锁的四个必要条件其中一个就可以避免死锁。
(1)互斥条件无法打破,因为锁本身就是互斥的。
(2)通过一次性请求所有资源可以打破请求与保持条件。
(3)允许线程强行从占有者那里获取某些资源可以打破不可剥夺条件。
(4)实行资源有序分配策略可以打破循环等待条件。
(5)锁排序法:线程只有获取A锁才能获取B锁。
如何进行死锁诊断:
当程序出现了死锁现象,我们可以使用jdk自带的工具:jps和 jstack。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)