- java.lang.Object
-
- java.util.concurrent.ExecutorCompletionService<V>
-
- すべての実装されたインタフェース:
CompletionService<V>
public class ExecutorCompletionService<V> extends Object implements CompletionService<V>
タスクの実行に、指定されたExecutor
を使用するCompletionService
です。 このクラスは、送信されたタスクが完了時に、take
を使用してアクセス可能なキューに配置されるように調整します。 このクラスは軽量であるため、タスク・グループを処理する際に一時的に使用できます。使用例。 それぞれが何らかの
Result
型の値を返す、特定の問題のためのソルバーのセットがあり、それらを同時に実行して、null以外の値を返す各ソルバーの結果を何らかのuse(Result r)
メソッドで処理する場合を考えてみます。 次のように記述することができます。void solve(Executor e, Collection<Callable<Result>> solvers) throws InterruptedException, ExecutionException { CompletionService<Result> cs = new ExecutorCompletionService<>(e); solvers.forEach(cs::submit); for (int i = solvers.size(); i > 0; i--) { Result r = cs.take().get(); if (r != null) use(r); } }
void solve(Executor e, Collection<Callable<Result>> solvers) throws InterruptedException { CompletionService<Result> cs = new ExecutorCompletionService<>(e); int n = solvers.size(); List<Future<Result>> futures = new ArrayList<>(n); Result result = null; try { solvers.forEach(solver -> futures.add(cs.submit(solver))); for (int i = n; i > 0; i--) { try { Result r = cs.take().get(); if (r != null) { result = r; break; } } catch (ExecutionException ignore) {} } } finally { futures.forEach(future -> future.cancel(true)); } if (result != null) use(result); }
- 導入されたバージョン:
- 1.5
-
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 ExecutorCompletionService(Executor executor)
基本タスクの実行用に指定されたexecutorを使用し、完了キューとしてLinkedBlockingQueue
を使用して、ExecutorCompletionServiceを作成します。ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
基本タスクの実行用に指定されたexecutorを使用し、完了キューとして指定されたキューを使用して、ExecutorCompletionServiceを作成します。
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 Future<V>
poll()
次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合はnull
を返します。Future<V>
poll(long timeout, TimeUnit unit)
次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合は、必要に応じて指定された待機時間まで待機します。Future<V>
submit(Runnable task, V result)
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。Future<V>
submit(Callable<V> task)
値を返す実行用タスクを送信して、保留状態のタスク結果を表すFutureを返します。Future<V>
take()
次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合は待機します。
-
-
-
コンストラクタの詳細
-
ExecutorCompletionService
public ExecutorCompletionService(Executor executor)
基本タスクの実行用に指定されたexecutorを使用し、完了キューとしてLinkedBlockingQueue
を使用して、ExecutorCompletionServiceを作成します。- パラメータ:
executor
- 使用するexecutor- 例外:
NullPointerException
- executorがnull
の場合
-
ExecutorCompletionService
public ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
基本タスクの実行用に指定されたexecutorを使用し、完了キューとして指定されたキューを使用して、ExecutorCompletionServiceを作成します。- パラメータ:
executor
- 使用するexecutorcompletionQueue
- 完了キューとして使用するキュー(通常は、このサービス専用に使用される)。 このキューは、アンバウンド形式として扱われます。完了したタスクに対するQueue.add
オペレーションの試行に失敗すると、それらのタスクが取得できなくなります。- 例外:
NullPointerException
- executorまたはcompletionQueueがnull
の場合
-
-
メソッドの詳細
-
submit
public Future<V> submit(Callable<V> task)
インタフェースからコピーされた説明:CompletionService
値を返す実行用タスクを送信して、保留状態のタスク結果を表すFutureを返します。 完了時に、このタスクを取り出すかポーリングできます。- 定義:
submit
、インタフェース:CompletionService<V>
- パラメータ:
task
- 送信するタスク- 戻り値:
- タスクの保留完了を表すFuture
-
submit
public Future<V> submit(Runnable task, V result)
インタフェースからコピーされた説明:CompletionService
実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。 完了時に、このタスクを取り出すかポーリングできます。- 定義:
submit
、インタフェース:CompletionService<V>
- パラメータ:
task
- 送信するタスクresult
- 正常に完了した場合に返す結果- 戻り値:
- タスクの保留完了を表すFuture。その
get()
メソッドは、完了時に指定された結果値を返します
-
take
public Future<V> take() throws InterruptedException
インタフェースからコピーされた説明:CompletionService
次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合は待機します。- 定義:
take
、インタフェース:CompletionService<V>
- 戻り値:
- 次の完了済みタスクを表すFuture
- 例外:
InterruptedException
- 待機中に割込みが発生した場合
-
poll
public Future<V> poll()
インタフェースからコピーされた説明:CompletionService
次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合はnull
を返します。- 定義:
poll
、インタフェース:CompletionService<V>
- 戻り値:
- 次の完了済みタスクを表すFuture。何も存在しない場合は
null
-
poll
public Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException
インタフェースからコピーされた説明:CompletionService
次の完了済みタスクを表すFutureを取得して削除します。何も存在しない場合は、必要に応じて指定された待機時間まで待機します。- 定義:
poll
、インタフェース:CompletionService<V>
- パラメータ:
timeout
- 処理を中止するまでの待機時間。単位はunit
unit
-timeout
パラメータの解釈方法を決定するTimeUnit
- 戻り値:
- 次の完了済みタスクを表すFuture。指定された待機時間が経過しても何も存在しない場合は
null
- 例外:
InterruptedException
- 待機中に割込みが発生した場合
-
-