- java.lang.Object
-
- java.util.concurrent.ExecutorCompletionService<V>
-
- 实现的所有接口
-
CompletionService<V>
public class ExecutorCompletionService<V> extends Object implements CompletionService<V>
CompletionService
,它使用提供的Executor
来执行任务。 此类安排提交的任务在完成后放置在可使用take
访问的队列中。 该类足够轻巧,适合在处理任务组时进行瞬态使用。用法示例。 假设你有一组特定问题的求解器,每个都返回某种类型的值
Result
,并希望同时运行它们,处理每个返回非空值的结果,在某些方法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)
使用提供的执行程序创建ExecutorCompletionService以执行基本任务,并将LinkedBlockingQueue
创建为完成队列。ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
使用提供的执行程序创建ExecutorCompletionService,以执行基本任务,并将提供的队列作为其完成队列。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 Future<V>
submit(Runnable task, V result)
提交Runnable任务以执行并返回表示该任务的Future。Future<V>
submit(Callable<V> task)
提交值返回任务以执行并返回表示任务的挂起结果的Future。-
声明方法的类 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
声明方法的接口 java.util.concurrent.CompletionService
poll, poll, take
-
-
-
-
构造方法详细信息
-
ExecutorCompletionService
public ExecutorCompletionService(Executor executor)
使用提供的执行程序创建ExecutorCompletionService以执行基本任务,并将LinkedBlockingQueue
创建为完成队列。- 参数
-
executor
- 要使用的执行程序 - 异常
-
NullPointerException
- 如果遗嘱执行人是null
-
ExecutorCompletionService
public ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
使用提供的执行程序创建ExecutorCompletionService,以执行基本任务,并将提供的队列作为其完成队列。- 参数
-
executor
- 要使用的执行程序 -
completionQueue
- 用作完成队列的队列,通常是专用于此服务的队列。 此队列被视为无限制 - 已完成任务的尝试失败Queue.add
导致它们无法检索。 - 异常
-
NullPointerException
- 如果executor或completionQueue是null
-
-
方法详细信息
-
submit
public Future<V> submit(Callable<V> task)
从界面复制的说明:CompletionService
提交值返回任务以执行并返回表示任务的挂起结果的Future。 完成后,可以采取或轮询此任务。- Specified by:
-
submit
在界面CompletionService<V>
- 参数
-
task
- 要提交的任务 - 结果
- 表示未完成任务的Future
- 异常
-
RejectedExecutionException
- 如果无法安排任务执行 -
NullPointerException
- 如果任务为null
-
submit
public Future<V> submit(Runnable task, V result)
从界面复制的说明:CompletionService
提交Runnable任务以执行并返回表示该任务的Future。 完成后,可以采取或轮询此任务。- Specified by:
-
submit
在界面CompletionService<V>
- 参数
-
task
- 要提交的任务 -
result
- 成功完成后返回的结果 - 结果
-
表示未完成任务的Future,其
get()
方法将在完成时返回给定的结果值 - 异常
-
RejectedExecutionException
- 如果无法安排任务执行 -
NullPointerException
- 如果任务为空
-
-