本来,运行这段程序,想输出一个结果,但是一直不输出结果,等不及了想看看情况,怎么办呢?
(会不会发生死锁了呀,怎么办呢???急呀…)
我们还是用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博客