【发布时间】:2018-12-05 10:14:23
【问题描述】:
我正在查看 jstack 日志,这就是我所看到的:
"com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2" #250 守护进程 prio=5 os_prio=0 tid=0x00007f9de0016000 nid=0x7e54 可运行 [0x00007f9d6495a000] java.lang.Thread.State:可运行 在 com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534) - 锁定 0x00000006fa818a38>(com.mchange.v2.async.ThreadPoolAsynchronousRunner)
"com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1" #249 daemon prio=5 os_prio=0 tid=0x00007f9de000c000 nid=0x7e53 等待监控入口 [0x00007f9d649db000] java.lang.Thread.State: BLOCKED (在对象监视器上) 在 java.lang.Object.wait(本机方法) - 等待 0x00000006fa818a38>(com.mchange.v2.async.ThreadPoolAsynchronousRunner) 在 com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534) - 锁定 0x00000006fa818a38>(com.mchange.v2.async.ThreadPoolAsynchronousRunner)
"com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0" #248 daemon prio=5 os_prio=0 tid=0x00007f9de001a000 nid=0x7e52 等待监控入口 [0x00007f9d64a5c000] java.lang.Thread.State: BLOCKED (在对象监视器上) 在 java.lang.Object.wait(本机方法) - 等待 0x00000006fa818a38>(com.mchange.v2.async.ThreadPoolAsynchronousRunner) 在 com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534) - 锁定 0x00000006fa818a38>(com.mchange.v2.async.ThreadPoolAsynchronousRunner)
因此,在此日志中,这三个线程中的每一个都设法获得了相同的锁,而底部的两个线程实际上被阻塞等待相同的锁。
谁能给我解释一下这个堆栈日志是什么意思?
【问题讨论】:
标签: java multithreading synchronization deadlock jstack