CompletionService
将执行服务与类似 Queue
的接口组合,从任务执行中删除任务结果的处理。CompletionService
接口包含用来提交将要执行的任务的 submit()
方法和用来询问下一完成任务的 take()
/poll()
方法。
CompletionService
允许应用程序结构化,使用 Producer/Consumer 模式,其中生产者创建任务并提交,消费者请求完成任务的结果并处理这些结果。CompletionService
接口由 ExecutorCompletionService
类实现,该类使用 Executor
处理任务并从CompletionService
导出 submit/poll/take 方法。
下列代码使用 Executor
和 CompletionService
来启动许多“solver”任务,并使用第一个生成非空结果的任务的结果,然后取消其余任务:
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);
}
分享到:
相关推荐
ExecutorService 和 CompletionService 是Java并发处理中的两种工具,它们用于管理和执行多个任务。ExecutorService 是一个接口,它是java.util.concurrent.Executor 接口的扩展,提供了一组方法来管理和控制线程池...
`CompletionService`是Java并发编程中的一个重要工具,它在`ExecutorService`的基础上提供了一种更加高效的方式来管理和处理并发任务的完成结果。`ExecutorService`允许我们提交任务(通常是`Runnable`或`Callable`...
`CompletionService`是另一个关键工具,它扩展了`ExecutorService`的功能,尤其适用于需要在任务完成时立即获取结果的情况。`CompletionService`通过`Future`接口返回每个任务的结果,使得我们可以在任务完成的瞬间...
CompletionService log4j+slf4j日志 实现的功能 登录注销 单聊 群聊 客户端提交任务,下载图片并显示 上线下线公告 在线用户记录 批量下载豆瓣电影的图片,并打为压缩包传输给客户端 客户端使用方式: 登录:默认...
3. **CompletionService**:`CompletionService`提供了一种获取异步任务结果的机制,它基于`ExecutorService`,使得你可以按完成顺序获取结果,而不需要知道任务的原始提交顺序。`TestCompletionService.java`可能...
CompletionService log4j+slf4j日志 实现的功能 登录注销 单聊 群聊 客户端提交任务,下载图片并显示 上线下线公告 在线用户记录 批量下载豆瓣电影的图片,并打为压缩包传输给客户端 客户端使用方式: 登录:默认...
CompletionService<PartETag> completionService = new ExecutorCompletionService(executor); for (int i = 1; i ; i++) { UploadPartResponse response = s3Client.uploadPart(uploadRequestBuilder.part...
9)已完成任务队列CompletionService 36 10)计时器CountDownLatch 37 11)周期性同步工具CyclicBarrier 38 12)异步计算的结果Future 40 13)安排线程池ScheduledExecutorService 40 五多线程面试题 41 六其他主题 41 1)...
6.3.6 示例:使用CompletionService实现页面渲染器 6.3.7 为任务设置时限 6.3.8 示例:旅行预定门户网站 第7章 取消与关闭 第8章 线程池的使用 第9章 图形用户界面应用程序 第三部分 活跃性、性能与测试 第10...
Java的并发编程框架`java.util.concurrent`包提供了`Executor`接口和相关的实现,包括`ExecutorService`、`CompletionService`等,它们使得并发编程更加简洁高效。`CompletionService`允许获取已完成任务的结果,...
通过`CompletionService.submit(Callable)`提交任务,然后调用`take()`或`poll()`方法来获取最先完成的任务结果,这样可以按照任务完成的顺序组装结果,无需等待所有任务完成。 另外,`CompletableFuture`是Java 8...
6.3.6 示例:使用CompletionService实现页面渲染器 6.3.7 为任务设置时限 6.3.8 示例:旅行预定门户网站 第7章 取消与关闭 第8章 线程池的使用 第9章 图形用户界面应用程序 第三部分 活跃性、性能与测试 第10...
- CompletionService - log4j+slf4j日志 - 实现的功能 - 登录注销 - 单聊 - 群聊 - 客户端提交任务,下载图片并显示 - 上线下线公告 - 在线用户记录 - 批量下载豆瓣电影的图片,并打为压缩包传输给客户端 ...
- `java.util.concurrent.CompletionService`:允许获取执行任务的结果,`ExecutorCompletionService` 是其具体实现,结合了 `ExecutorService` 和 `Future`。 5. 线程池执行原理 线程池的执行过程主要包括任务提交...
CompletionService是一个高级的并发工具,它结合了Executor和BlockingQueue的功能,允许处理已完成的任务,而无需等待所有任务完成。这对于处理大量并发任务并需要及时处理已完成任务的场景非常有用。 为任务设置...
5. **`java.util.concurrent.CompletionService`和`ForkJoinPool`**:前者提供了异步任务的完成服务,后者是基于分治策略的并行计算框架,适用于大规模并行计算。 6. **线程安全的集合**:`ConcurrentHashMap`、`...
7. CompletionService:提供了一个基于ExecutorService的接口,可以获取已经完成的任务,简化了异步处理的流程。 学习“02-4(马士兵)-多线程并发”这个主题,你需要理解这些核心概念,并通过实践加深对并发编程的...
例如,我们可以通过`CompletionService`配合`ExecutorService`,使用Lambda表达式创建的任务,实现任务的分批执行和结果的顺序获取。同时,`Future`和`Callable`接口也可以与Lambda表达式结合,用于处理有返回结果的...