2009-10-05 5 views
16

このテストシナリオでは、送信されたタスク(スレッド)の数も巨大ではありません。サブミット時にExecutors.newCachedThreadPoolがjava.util.concurrent.RejectedExecutionExceptionをスローする理由

+2

質問を洗練してください。例えば。短いテストケースを追加してください。 – Kutzi

+0

申し訳ありませんが、IPの理由により私が共有できるコードはあまりありません。ナッツシェルでは、Callable タイプのsubmitと呼んでいます。私はこれが起こる可能性のあるシナリオを探しています。 –

+1

特定のシナリオはありませんが、代わりにこの例外がスローされる仮想シナリオを知りたいとお考えですか?もしそうなら、あなたは「どうして...」という質問を「いつ...」と言い換えるべきですか? – akf

答えて

30

それ)。

あなたが指定した情報に基づいて、実行可能サービスをどこかにシャットダウンしてから、その呼び出し可能プログラムを送信します。 shutdownまたはshutdownNowに電話をかけるかどうか確認し、そうであればこの時点以降にタスクを追加しないようにしてください。

さらに、デバッグを助けるために、java.util.concurrent.RejectedExecutionHandlerという独自の実装を登録することができます。エグゼキュータがタスクを受け入れることができないときはいつでも、そのrejectedExecutionメッセージが呼び出されます。そのため、原因を見つけるのに役立つ初期状態検査ロジックをいくつか追加することができます。

+0

あなたは正しいです。私はexecutorプールを閉鎖していたコードを見つけました。ありがとう –

25

私はExecutors.newCachedThreadPool()メソッドの呼び出しではどこでも参照してください。RejectedExecutionExceptionがスローされます。

  • ThreadPoolExecutorと最大プールサイズに​​を呼び出すに達している:Java 6で投げているように見えるだけで3例があります。
  • に​​を同時に呼び出すと、shutdownNowと同時に、shutdownNowコールでレースが失われました。
  • 実行者がシャットダウンされた後にScheduledThreadPoolExecutorに実行可能ファイルの実行をスケジュールしようとすると、あなたがインスタンス化する方法のコードサンプルを提供し、私たちはあなたのCallableクラスまたはのようなものの内部の詳細を必要としないとして(IPはここに非問題にする必要がありますプールでsubmitを呼び出す必要があります
+4

+1可能なすべての事例をリストアップするため –