您的位置 首页 教育

15.线程诊断

    本来,运行这段程序,想输出一个结果,但是一直不输出结果,等不及了想看看情况,怎么办呢? (会不会发生死…

 

 

本来,运行这段程序,想输出一个结果,但是一直不输出结果,等不及了想看看情况,怎么办呢?

(会不会发生死锁了呀,怎么办呢???急呀…)

我们还是用jstack 进程号,来执行一把,上图nohup启动了java进程,得到了进程号32752

我们使用jstack32752试试看。

 

我们可以在jstack最后一段输出中,发现Found one Java-Level deadlock

jstack在进程中,找到了一个死锁。

我们再看上图,

thead-1的29行和thread-0的21行发生了死锁。

我们来看看代码。 

分析下这段代码,线程0最开始拿到了对象a,等了2s,线程1等了1s拿到了对象b,但马上想去拿对象a,但对象a被线程0拿着的,线程1只有等着。但2s后线程0醒了,它想要去拿对象b,但对象b又被线程1拿着的,于是乎线程0等线程1释放锁资源,线程1也等线程0释放锁资源,于是就锁起来,发生了死锁问题。

上一篇:14.线程诊断_cpu占用高(top、ps H -eo pid,tid,%CPU | grep tid、clear、jstack pid)——-注意jstack输出的线程信息是16进制的_tgbyhn31的博客-CSDN博客

下一篇:​​​​​​​16.jvm内存结构部分——本地方法栈_tgbyhn31的博客-CSDN博客

本文来自网络,不代表0514资讯网立场,转载请注明出处:https://www.0514zx.com/info/12517.html
0514zx.com

作者: 0514zx.com

优质职场领域创作者
联系我们

联系我们

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部