一般情况下, 我们分析一个线程阻塞另外一个线程:
"pool-1-thread-2" #21 prio=5 os_prio=0 tid=0x000000003aded800 nid=0x67a8 waiting for monitor entry [0x000000003d87e000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.example.jstack.JstackThreadUtils.run2(JstackThreadUtils.java:20)
- waiting to lock <0x000000066e50aac0> (a java.lang.String)
at com.example.jstack.LoopMain$2.run(LoopMain.java:25)
docker at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Locked ownable synchronizers:
- <0x000000066e67b810> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"pool-1-thread