死锁产生的条件是什么?
此时程序并没有结束,这种现象就是死锁现象...线程t1持有A的锁等待获取B锁,线程t2持有B的锁等待获取A的锁。
如何进行死锁诊断?
当程序出现了死锁现象,我们可以使用jdk自带的工具:jps
和 jstack
jps
:输出JVM中运行的 进程状态信息jstack
:查看 java进程内线程的堆栈信息
解决步骤如下
第一:查看运行的线程
第二,使用jstack
查看线程运行的情况,下图是截图的关键信息
运行命令:jstack -l 46032
其他解决工具,可视化工具
jconsole
用于对jvm的内存,线程,类 的监控,是一个基于 jmx 的 GUI 性能监控工具
打开方式:java 安装目录 bin目录下 直接启动 jconsole.exe 就行
VisualVM
:故障处理工具 能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈
打开方式:java 安装目录 bin目录下 直接启动 jvisualvm.exe就行
总结
死锁产生的条件是什么? 一个线程需要同时获取多把锁,这时就容易发生死锁 如何进行死锁诊断?
当程序出现了死锁现象,我们可以使用jdk自带的工具:jps和 jstack
jps
:输出JVM中运行的进程状态信息
jstack
:查看java进程内线程的堆栈信息
,查看日志,检查是否有死锁
如果有死锁现象,需要查看具体代码分析后,可修复
可视化工具jconsole
、VisualVM
也可以检查死锁问题
评论( 0 )