查找等待/休眠线程的原因
2022-09-01 09:01:31
我注意到我的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
现在的问题是:这些线程在等什么?我有可疑的类,它似乎生成了这些线程,但我不知道究竟是什么让这些线程卡住。
除了逐行撕开类并继续监视线程行为之外,我还能做些什么来找到导致这种情况的原因?