私の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
今の質問は次のとおりです。待っているこれらのスレッドは何ですか? 私はこれらのスレッドを生成すると思われる疑わしいクラスを持っていますが、正確にこれらのスレッドがスタックしているのはわかりません。
クラスごとにラインを分割し、スレッドの動作を監視し続けることを除いて、これの原因を見つけるためにできることはありますか?
um彼らはキューでブロックしています。特に、キューが空のときに無期限にブロックする 'LinkedBlockingQueue.take()'。 –
それはどういう意味ですか?どのようなキューとそのメソッド 'take()'は何をしますか? – Timo
ええと、あなたのコードです...私たちは霊的ではありません。スレッドダンプが何を伝えているかを正確に伝えるだけです。 –