寻找等待/休眠线程的原因
寻找等待/休眠线程的原因
我注意到我的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
现在问题是:这些线程在等待什么?
我怀疑有一个类似的类会产生这些线程,但我不知道是什么具体导致这些线程被卡住。
除了逐行拆开类并持续监控线程行为之外,我还能做些什么来找到原因吗?