|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjava.util.concurrent.ExecutorCompletionService<V>
public class ExecutorCompletionService<V>
タスクの実行に、指定された Executor を使用する CompletionService です。このクラスは、送信されたタスクが完了時に take を使用してアクセス可能なキューに配置されるように手配します。このクラスは軽量であるため、タスクグループを処理する際に一時的に使用できます。
使用例 それぞれが何らかの Result 型を返す、特定の問題に対応したソルバセットを保持しており、これらを同時に実行して、null 以外の値を返す結果をそれぞれ use(Result r) メソッドで処理する場合を考えます。次のように記述することができます。
void solve(Executor e,
Collection<Callable<Result>> solvers)
throws InterruptedException, ExecutionException {
CompletionService<Result> ecs
= new ExecutorCompletionService<Result>(e);
for (Callable<Result> s : solvers)
ecs.submit(s);
int n = solvers.size();
for (int i = 0; i < n; ++i) {
Result r = ecs.take().get();
if (r != null)
use(r);
}
}
今度は、例外が発生した結果を無視して、タスクセットの null 以外の最初の結果を使用する場合を考えます。有効な最初の結果を取得できたら、ほかのタスクはすべて取り消します。
void solve(Executor e,
Collection<Callable<Result>> solvers)
throws InterruptedException {
CompletionService<Result> ecs
= new ExecutorCompletionService<Result>(e);
int n = solvers.size();
List<Future<Result>> futures
= new ArrayList<Future<Result>>(n);
Result result = null;
try {
for (Callable<Result> s : solvers)
futures.add(ecs.submit(s));
for (int i = 0; i < n; ++i) {
try {
Result r = ecs.take().get();
if (r != null) {
result = r;
break;
}
} catch (ExecutionException ignore) {}
}
}
finally {
for (Future<Result> f : futures)
f.cancel(true);
}
if (result != null)
use(result);
}
| コンストラクタの概要 | |
|---|---|
ExecutorCompletionService(Executor executor)
基本タスクの実行用に指定された executor を使用し、完了キューとして LinkedBlockingQueue を使用して、ExecutorCompletionService を作成します。 |
|
ExecutorCompletionService(Executor executor,
BlockingQueue<Future<V>> completionQueue)
基本タスクの実行用に指定された executor を使用し、完了キューとして指定されたキューを使用して、ExecutorCompletionService を作成します。 |
|
| メソッドの概要 | |
|---|---|
Future<V> |
poll()
次の完了済みタスクを表す Future を取得して削除します。 |
Future<V> |
poll(long timeout,
TimeUnit unit)
次の完了済みタスクを表す Future を取得して削除します。 |
Future<V> |
submit(Callable<V> task)
値を返す実行用タスクを送信して、保留状態のタスク結果を表す Future を返します。 |
Future<V> |
submit(Runnable task,
V result)
実行用の Runnable タスクを送信し、そのタスクを表す Future を返します。 |
Future<V> |
take()
次の完了済みタスクを表す Future を取得して削除します。 |
| クラス java.lang.Object から継承されたメソッド |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
|---|
public ExecutorCompletionService(Executor executor)
LinkedBlockingQueue を使用して、ExecutorCompletionService を作成します。
executor - 使用する executor
NullPointerException - executor が null の場合
public ExecutorCompletionService(Executor executor,
BlockingQueue<Future<V>> completionQueue)
executor - 使用する executorcompletionQueue - 通常、このサービス専用の完了キューとして使用するキュー
NullPointerException - executor または completionQueue が null の場合| メソッドの詳細 |
|---|
public Future<V> submit(Callable<V> task)
CompletionService の記述:
CompletionService<V> 内の submittask - 送信するタスク
public Future<V> submit(Runnable task,
V result)
CompletionService の記述:
CompletionService<V> 内の submittask - 送信するタスクresult - 正常に完了した場合に返す結果
public Future<V> take()
throws InterruptedException
CompletionService の記述:
CompletionService<V> 内の takeInterruptedException - 待機中に割り込みが発生した場合public Future<V> poll()
CompletionService の記述:
CompletionService<V> 内の poll
public Future<V> poll(long timeout,
TimeUnit unit)
throws InterruptedException
CompletionService の記述:
CompletionService<V> 内の polltimeout - 処理を中止するまでの待機時間。単位は unitunit - timeout パラメータの解釈方法を決定する TimeUnit
InterruptedException - 待機中に割り込みが発生した場合
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。