我注意到我的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
現在的問題是:什麼是這些線程在等待什麼? 我懷疑類似乎產生這些線程,但我不知道究竟是什麼使這些線程卡住。
有沒有什麼我可以做的,以找到原因,除了撕裂類逐行逐行並保持監視線程行爲?
恩,他們阻塞了隊列。具體來說,當一個隊列爲空時,LinkedBlockingQueue.take()會無限期地阻塞。 –
這是什麼意思?什麼隊列和'()()'做的方法是什麼? – Timo
呃,這是你的代碼......我們不是通靈。只要告訴你線程轉儲告訴你什麼。 –