JConsole
- 首先启动死锁测试demo程序
- 在cmd中运行jconsole打开图形化界面工具
- 选择我们需要分析的进程进行连接
选择线程选项,点击底部检测死锁功能
查看死锁线程详情
线程1想获取的锁被线程0所持有,线程0想获取的锁被线程1持有,两个线程都在互相等待获取被对方所持有的锁资源,因此造成了死锁。
Jstack
首先通过jps查看当前运行的Java进程
C:\Users\Sylvia\Desktop>jps
16464 Launcher
20692
9620 DeadLockTest
15544 Jps
10636 RemoteMavenServer
9148 JConsole
通过jstack分析死锁,可以查看到当前死锁详情
jstack -l 9620
Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x0000000005037be8 (object 0x000000076f5987c0, a java.lang.Object),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x000000000503a688 (object 0x000000076f5987d0, a java.lang.Object),
which is held by "Thread-1"
Java stack information for the threads listed above:
===================================================
"Thread-1":
at com.laravelshao.thread.deadlock.DeadLock.run(DeadLock.java:36)
- waiting to lock <0x000000076f5987c0> (a java.lang.Object)
- locked <0x000000076f5987d0> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:745)
"Thread-0":
at com.laravelshao.thread.deadlock.DeadLock.run(DeadLock.java:27)
- waiting to lock <0x000000076f5987d0> (a java.lang.Object)
- locked <0x000000076f5987c0> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:745)
Found 1 deadlock.