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);
   }
 }
 今度は、例外が発生した結果を無視して、タスク・セットのnull以外の最初の結果を使用する場合を考えます。有効な最初の結果を取得できたら、ほかのタスクはすべて取り消します。
  
 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を作成します。
- 
メソッドのサマリークラス java.lang.Objectで宣言されたメソッドclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitインタフェース java.util.concurrent.CompletionServiceで宣言されたメソッドpoll, poll, take
- 
コンストラクタの詳細- 
ExecutorCompletionServicepublic ExecutorCompletionService(Executor executor)基本タスクの実行用に指定されたexecutorを使用し、完了キューとしてLinkedBlockingQueueを使用して、ExecutorCompletionServiceを作成します。- パラメータ:
- executor- 使用するexecutor
- 例外:
- NullPointerException- executorが- nullの場合
 
- 
ExecutorCompletionServicepublic ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)基本タスクの実行用に指定されたexecutorを使用し、完了キューとして指定されたキューを使用して、ExecutorCompletionServiceを作成します。- パラメータ:
- executor- 使用するexecutor
- completionQueue- 完了キューとして使用するキュー(通常は、このサービス専用に使用される)。 このキューは、アンバウンド形式として扱われます。完了したタスクに対する- Queue.addオペレーションの試行に失敗すると、それらのタスクが取得できなくなります。
- 例外:
- NullPointerException- executorまたはcompletionQueueが- nullの場合
 
 
- 
- 
メソッドの詳細- 
submitインタフェースからコピーされた説明:CompletionService値を返す実行用タスクを送信して、保留状態のタスク結果を表すFutureを返します。 完了時に、このタスクを取り出すかポーリングできます。- 定義:
- submit、インタフェース:- CompletionService<V>
- パラメータ:
- task- 送信するタスク
- 戻り値:
- タスクの保留完了を表すFuture
- 例外:
- RejectedExecutionException- タスクの実行をスケジュールできない場合
- NullPointerException- タスクがnullの場合
 
- 
submitインタフェースからコピーされた説明:CompletionService実行用のRunnableタスクを送信し、そのタスクを表すFutureを返します。 完了時に、このタスクを取り出すかポーリングできます。- 定義:
- submit、インタフェース:- CompletionService<V>
- パラメータ:
- task- 送信するタスク
- result- 正常に完了した場合に返す結果
- 戻り値:
- タスクの保留完了を表すFuture。そのget()メソッドは、完了時に指定された結果値を返します
- 例外:
- RejectedExecutionException- タスクの実行をスケジュールできない場合
- NullPointerException- タスクがnullの場合
 
 
-