3

この質問は、shutdownNow() から返されたリストを送信済みの Runnable に変換できないに関連しています

問題定義

から実行時例外を取得したいのですがRunnable、これは を使用してのみ取得できますsubmit() call which returns me Future<?>

使用するSubmitと、 によって提供される機能が失われexecuteます。shutdownNow()開始されていないスレッドを追跡するために使用できなくなるため。

これは本当ですか

タスクから実行可能な例外をキャッチしたい場合、shutdownnow を使用して開始されていないタスクを見つけることはできません。

4

1 に答える 1

1

execute()FutureTask (Runnable) のカスタム サブクラスを使用することで、Future と一緒に使用できます。ほとんどの Executor の場合、呼び出すsubmit()と、内部で Runnable/Callable が FutureTask でラップされるだけです。FutureTask のカスタム サブクラスで、基になる Runnable/Callable への参照を保持し、それを返すメソッドを公開します。次に、 を呼び出すshutdownNow()と、返される Runnables はカスタム FutureTask のインスタンスである必要があります。(基になるタスクを取得できるようにするために FutureTask をサブクラス化する必要があるのは面倒ですが、それがその方法です)。

于 2012-09-21T17:35:12.560 に答える