|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjava.util.concurrent.ExecutorCompletionService<V>
public class ExecutorCompletionService<V>
使用提供的 Executor 来执行任务的 CompletionService。此类将安排那些完成时提交的任务,把它们放置在可使用 take 访问的队列上。该类非常轻便,适合于在执行几组任务时临时使用。
用法示例。 假定您有针对某个问题的一组求解程序,每个求解程序都能返回某种类型的 Result 值,并且您想同时运行它们,使用方法 use(Result r) 处理返回非 null 值的每个求解程序的返回结果。可以这样编写程序:
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)
使用为执行基本任务而提供的执行程序创建一个 ExecutorCompletionService,并将 LinkedBlockingQueue 作为完成队列。 |
|
ExecutorCompletionService(Executor executor,
BlockingQueue<Future<V>> completionQueue)
使用为执行基本任务而提供的执行程序创建一个 ExecutorCompletionService,并将所提供的队列作为其完成队列。 |
|
| 方法摘要 | |
|---|---|
Future<V> |
poll()
获取并移除表示下一个已完成任务的 Future,如果不存在这样的任务,则返回 null。 |
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 作为完成队列。
executor - 要使用的执行程序
NullPointerException - 如果执行程序为 null
public ExecutorCompletionService(Executor executor,
BlockingQueue<Future<V>> completionQueue)
executor - 要使用的执行程序completionQueue - 用作完成队列的队列,通常是专供此服务使用的队列
NullPointerException - 如果执行程序或 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 - 放弃之前需要等待的时间长度,以 unit 为时间单位unit - 确定如何解释 timeout 参数的 TimeUnit
InterruptedException - 如果在等待时被中断
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。