首页 > 解决方案 > 如何确定我的 Java 线程正在等待什么?

问题描述

我在 Amazon Linux 上使用 JDK 8 和 Wildfly 11。我已经安装了 jstack。我试图弄清楚为什么 CPU 利用率会上升,并且做一个线程转储会揭示这样的事情

"default task-80" #266 prio=5 os_prio=0 tid=0x00000000090f0000 nid=0x2458 waiting on condition [0x00007f32204d7000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x0000000181c9e470> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

如何确定线程正在等待的条件或锁?

标签: javamultithreadinglockingwaitdump

解决方案


推荐阅读