2011-07-15 12 views
0

threadpoolexecutorで実行中に実行可能ファイルがハングアップする場合、実行可能ファイルを停止して終了させる方法がありますか? getActiveCountメソッドは、「アクティブに実行中」としてハングしている実行可能ファイルを考慮しますか?java - threadpoolexecutorでハングアップする実行可能ファイルはどうなりますか?

+0

「ハング」とはどういう意味ですか? – toto2

+1

スレッドで 'interrupt'を呼び出す' cancel'を呼び出すことによって、タスクを「kill」することができます。 catchは、割り込みが何かをするためには、あなた自身で 'run'メソッドでプログラムしなければならないということです。だから、あなたの "ハングする"スレッドは、定期的に割り込みをチェックする必要があります(または、割り込みで起動する 'Thread.sleep'のようなメソッドの中にある)。 – toto2

+0

@toto、それは私に結果を(大きさの順序で)与えるのに時間がかかりすぎる場合、ハングアップすることを検討します。私はそのような問題に直面していません(まだ)ので、私はただ想像的に(そして好奇心)を考えています。 – lgp

答えて

4

忙しいスレッドを殺す安全な方法はありません(別のプロセスで実行して殺す以外の方法)タイムアウトの結果を待ってスレッドが長くなっているかどうかを検出できます。タイムアウト後にタスクをキャンセルするタスクを追加することもできますが、これはスレッドのタスクを中断するだけで、中断することはありません。

タスクが「ハング」してコードが固定されない理由を判断する方がよい場合があります。

Thread.currentThread()を格納するタスクを開始すると、共有変数になります。その後、getStackTrace()を定期的に実行して、何が実行されているかを判断してログに記録することができます。

+0

おかげでよろしく、+1 – mKorbel

+0

@Peter私は本当に大きなアプリを持っており、多くのファイルで多くのタスクを実行しています。スレッドが詰まっていると、どのタスクがスレッドをハングアップさせているかを教えてくれる部分にどのようにしてもらえますか? –

+0

@MuhammadUmarイン・デバッガーを実行していない限り、スレッド名(タスクに基づく可能性があります)またはスタック・トレースのみが表示されます。これで十分でない場合は、スレッドに意味のある名前を付けることで、タスクが何をしているのかを判断することができます。 –

関連する問題