寻找等待/休眠线程的原因

22 浏览
0 Comments

寻找等待/休眠线程的原因

我注意到我的Java应用程序(运行在tomcat6上)会产生许多没有终止的线程。

所以我创建了一个线程转储,并注意到有大量的线程在等待,就像这样:

"pool-1-thread-22" prio=5 tid=101b4b000 nid=0x127122000 waiting on condition [127121000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <6c340cee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:680)
   Locked ownable synchronizers:
    - None

现在问题是:这些线程在等待什么?

我怀疑有一个类似的类会产生这些线程,但我不知道是什么具体导致这些线程被卡住。

除了逐行拆开类并持续监控线程行为之外,我还能做些什么来找到原因吗?

0