📚 分类
多线程
🕵🏽‍♀️ 问题描述
死锁产生的条件是什么?
👨‍🏫 问题讲解
❒ 死锁: 一个线程需要同时获取多把锁,这时就容易发生死锁

线程1:synchronized A,然后 synchronized B
线程2:synchronized B,然后 synchronized A

此时线程1,和线程2互为等待。

❒ 如何进行死锁诊断?

✔ 当程序出现了死锁现象,我们可以使用jdk自带的工具:jps和jstack
✔ jps:输出JVM中运行的进程状态信息
✔ jstack:查看java进程内线程的堆栈信息(jstack -l 进程id)

❒ 其他解决工具,可视化工具

▣ jconsole
✔ 用于对jvm的内存,线程,类的监控,是一个基于jmx的GUI性能监控工具打开方式:java 安装目录 bin目录下 直接启动jconsole.exe 就行

▣ VisualVM:故障处理工具
✔ 能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对象,反向查看分配的堆栈打开方式:java 安装目录 bin目录下 直接启动 jvisualvm.exe就行

🏳️‍🌈 问题总结
❒ 死锁产生的条件是什么?

✔ 一个线程需要同时获取多把锁,这时就容易发生死锁

❒ 如何进行死锁诊断?

✔ 当程序出现了死锁现象,我们可以使用jdk自带的工具:jps和jstackjps:输出JVM中运行的进程状态信息
✔jstack:查看java进程内线程的堆栈信息,查看日志,检查是否有死锁如果有死锁现象,需要查看具体代码分析后,可修复可视化工具jconsole、VisualVM也可以检查死锁问题
📖 问题信息
📈 浏览次数:5 | 📅 更新时间:2025-12-01 22:02:29
📦 创建信息
🏷️ ID:111 | 📅 创建时间:2024-12-09 17:35:22