我们可以利用jstack命令来检测死锁,首先利用jps找到我们的java进程:
nagocoler@NagodeMacBook-Pro ~ % jps
51592 Launcher
51690 Jps
14955
51693 Main
nagocoler@NagodeMacBook-Pro ~ % jstack 51693
...
Java stack information for the threads listed above:
===================================================
"Thread-1":
at com.test.Main.lambda$main$1(Main.java:46)
- waiting to lock <0x000000076ad27fc0> (a java.lang.Object)
- locked <0x000000076ad27fd0> (a java.lang.Object)
at com.test.Main$$Lambda$2/1867750575.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
"Thread-0":
at com.test.Main.lambda$main$0(Main.java:34)
- waiting to lock <0x000000076ad27fd0> (a java.lang.Object)
- locked <0x000000076ad27fc0> (a java.lang.Object)
at com.test.Main$$Lambda$1/396873410.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)
Found 1 deadlock.
jstack自动帮助我们找到了一个死锁,并打印出了相关线程的栈追踪信息,同样的,使用jconsole
也可以进行监测。