- 既知のすべての実装クラス:
ExecutorCompletionService
public interface CompletionService<V>
新しい非同期タスクの生成を、完了済みタスクの結果の消費から分離するサービスです。 プロデューサは、実行用のタスクに対して
submit
を実行します。 コンシューマは、完了済みのタスクに対してtake
を実行し、結果を完了した順に処理します。 たとえば、CompletionService
を使用して、非同期入出力を管理できます。この場合、読取りを実行するタスクはプログラムまたはシステムの一部に送信され、読取りの完了時にプログラムの別の部分で処理されます。処理の順序は、要求された順序とは異なる場合があります。
CompletionService
は通常、これらのタスクを実際に実行するために個別のExecutor
を使用します。この場合、CompletionService
は内部の完了キューのみを管理します。 ExecutorCompletionService
クラスは、この手法の実装を提供します。
メモリー整合性効果: タスクをCompletionService
に送信する前のスレッド内のアクションは、そのタスクによって実行されるアクションの前に発生し、一方それは、対応するtake()
からの正常な復帰のあとのアクションよりも前に発生します。
- 導入されたバージョン:
- 1.5
-
メソッドの詳細
-
submit
値を返す実行用タスクを送信して、保留状態のタスク結果を表すFutureを返します。 完了時に、このタスクを取り出すかポーリングできます。- パラメータ:
task
- 送信するタスク- 戻り値:
- タスクの保留完了を表すFuture
- 例外:
RejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- タスクがnullの場合
-
submit
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。 完了時に、このタスクを取り出すかポーリングできます。- パラメータ:
task
- 送信するタスクresult
- 正常に完了した場合に返す結果- 戻り値:
- タスクの保留完了を表すFuture。その
get()
メソッドは、完了時に指定された結果値を返します - 例外:
RejectedExecutionException
- タスクの実行をスケジュールできない場合NullPointerException
- タスクがnullの場合
-
take
Future<V> take() throws InterruptedException次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合は待機します。- 戻り値:
- 次の完了済みタスクを表すFuture
- 例外:
InterruptedException
- 待機中に割込みが発生した場合
-
poll
次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合はnull
を返します。- 戻り値:
- 次の完了済みタスクを表すFuture。何も存在しない場合は
null
-
poll
Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合は、必要に応じて指定された待機時間まで待機します。- パラメータ:
timeout
- 処理を中止するまでの待機時間。単位はunit
unit
-timeout
パラメータの解釈方法を決定するTimeUnit
- 戻り値:
- 次の完了済みタスクを表すFuture。指定された待機時間が経過しても何も存在しない場合は
null
- 例外:
InterruptedException
- 待機中に割込みが発生した場合
-