2016-08-31 5 views
0

デバッグの目的で、スレッド状態でリッスンしたいと思います。スレッドがログを待っているときと、いつでも「再開」するたびに通知を出力したい。スレッドのJavaはスレッド状態でリッスンします

+0

これを実行する安価な方法の一つは、 'jstack'のようなツールを使ってスレッドダンプを取ることです。 –

答えて

0

方法getStateを()が可能Thread.Stateを返します。

NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITINGまたは

Thread.State state = getThreadInQuestion().getState(); 
if(state == Thread.State.WAITING) { 
    System.out.println("Waiting"); 
} else if(state == Thread.State.RUNNABLE) { 
    System.out.println("Running"); 
}else{ 
    System.out.println("Neither running nor waiting") 
} 
+0

これはおそらくそれだけではない部分的な答えです。いつどのように印刷するのか分かりますか?つまり、スレッドはスレッドが再開したことをOPがどのように認識しますか? – bradimus

+0

'System.out.println'はスレッドセーフではありません! –

+0

また、このコードをどこに配置しますか?スレッドの状態は頻繁に変更される可能性があります。あなたのコードはリスナー宣言ではなく、ちょっとしたモニターです –

0

をTERMINATED私はそこにはないと思います「プログラム的に」スレッド状態を監視する良い方法です。しかし、VisualVMのようなプロファイリングツールの1つを使用することができます(他にもたくさんありますが、私は個人的にこれを好みます)。

VisualVMを使用してアプリケーションのスレッドを監視する方法については、この公式documentationを参照することもできます。

0

スレッドクラスを拡張することができます。クラスでは、リスナーをクラスに登録させることができ、状態が変更されるたびにスレッドによって通知されます。可能ですが、コード内のすべてのスレッドがクラスを使用していて、正規のスレッドではないことを保証する必要があるため、非常に複雑なソリューションになると思います。短いIMHOの中では、その部分が有効ではない

関連する問題