
产生死锁的原因:
1.系统资源不足
2.进程进行推进的顺序不合适
3.资源分配不当
按照图示写个死锁:
class HoldLockThread implements Runnable{
private String lockA;
private String lockB;
public HoldLockThread(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA){
System.out.println(Thread.currentThread().getName()+"已经持有"+lockA+" 尝试获取"+lockB);
synchronized (lockB){
System.out.println(Thread.currentThread().getName()+"获取到了"+lockB);
}
}
}
}
public class DeadLockDemo {
public static void main(String[] args) {
new Thread(new HoldLockThread("A锁","B锁"),"A线程").start();
new Thread(new HoldLockThread("B锁","A锁"),"B线程").start();
}
}
如何排查死锁问题呢:
使用:JPS命令(查询进程号)
jstack (进程号,查看问题所在)
得出来的结论:发现是死锁
"B线程" #12 prio=5 os_prio=0 tid=0x0 00000001b059000 nid=0xae50 waiting for monitor entry [0x000000001bc0f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at deadLock.HoldLockThread.run(DeadLockDemo.java:17)
- waiting to lock <0x00000007818e1038> (a java.lang.String)
- locked <0x00000007818e1068> (a java.lang.String)
at java.lang.Thread.run(Thread.java:745)
"A线程" #11 prio=5 os_prio=0 tid=0x000000001b056800 nid=0xe30c waiting for monitor entry [0x000000001bb0e000]
java.lang.Thread.State: BLOCKED (on object monitor)
at deadLock.HoldLockThread.run(DeadLockDemo.java:17)
- waiting to lock <0x00000007818e1068> (a java.lang.String)
- locked <0x00000007818e1038> (a java.lang.String)
at java.lang.Thread.run(Thread.java:745)

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix