2009-04-22 7 views
4

私は、java.util.concurrent.Executionサービスを持っています。これは、シングルスレッドのスレッドプールエグゼキュータです。私はそれに特定のタスクを提出する。タスクがチェックされていない例外をスローすると、スレッドは停止しますが、サービスによって新しいスレッドが生成され、それ以降のタスクが確実に実行されます。しかし、私はこの機能を望んでおらず、依然としてthreadPoolExecutorを使いたいと思っています。タスクがチェックされていない例外をスローした場合、サービスをshutDownNow()にしたい。threadpoolexecutorをダイス

これを達成する最も良い方法は何ですか?生成されたスレッドの数を制限するカスタムスレッドファクトリを使用するとよいでしょうか?

答えて

3

ThreadPoolExecutorサブクラスを作成して、afterExecuteメソッドをオーバーライドできます。このメソッドには、例外があった場合にnullでないスロー可能なパラメータがあります。

2

threadPoolExecutorExecutorCompletionServiceにラップすることができます。それから、take()を続けて、Futureを検索します。 future.get()Exceptionがスローされた場合は、threadpoolexecutor.shutdown()に電話してください。

+0

これは、JUnitでScheduledThreadPoolExecutorを使用して複数のスレッドを実行する場合、afterExecute()メソッドをオーバーライドする場合と比べて、このメソッドのThrowable引数が何らかの理由で常にnullだったため非常に便利です。 –

関連する問題