completablefuture线程池
时间: 2023-05-02 22:02:18 浏览: 191
CompletableFuture线程池是Java中的一种功能强大的非阻塞异步编程方法,可以在异步方法执行后返回新的CompletableFuture对象,该对象可以链式处理多个异步方法任务。通过使用CompletableFuture线程池,可以编写更加高效和优化的异步程序。
相关问题
CompletableFuture 线程池
CompletableFuture可以使用默认的线程池,也可以传入自定义的线程池。如果没有指定线程池,则会使用默认的线程池。 这意味着CompletableFuture可以在后台执行耗时的任务,而不会阻塞主线程。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Java多线程并发-线程池-CompletableFuture](https://blog.csdn.net/Bert_Chen/article/details/123243862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [CompletableFuture异步和线程池](https://blog.csdn.net/weixin_44674424/article/details/131084544)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
completablefuture 线程池案例
好的,下面是一个使用线程池和CompletableFuture的案例:
假设我们有一个需要执行的任务列表,我们希望并行执行这些任务并在所有任务完成后进行汇总。使用CompletableFuture和线程池,我们可以实现以下代码:
```
ExecutorService executor = Executors.newFixedThreadPool(10); // 创建线程池,最多同时执行10个任务
List<CompletableFuture<Integer>> futures = new ArrayList<>(); // 用于保存每个任务的CompletableFuture
List<Integer> taskList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); // 需要执行的任务列表
for (Integer task : taskList) {
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { // 使用CompletableFuture执行任务,并将结果包装为CompletableFuture
// 执行任务,这里我们使用一个简单的休眠来模拟任务执行
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return task * task;
}, executor);
futures.add(future);
}
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])); // 使用CompletableFuture.allOf将所有CompletableFuture合并为一个CompletableFuture
CompletableFuture<List<Integer>> allResults = allFutures.thenApply(v -> { // 当所有任务完成后,使用CompletableFuture.thenApply将结果转换为List<Integer>
return futures.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList());
});
List<Integer> results = allResults.join(); // 使用CompletableFuture.join获取最终结果
System.out.println(results); // 打印最终结果
```
在这个例子中,我们使用`CompletableFuture.supplyAsync`方法执行每个任务,并将结果包装为CompletableFuture。然后,我们将所有CompletableFuture合并为一个CompletableFuture,使用`CompletableFuture.allOf`方法。当所有任务完成后,我们使用`CompletableFuture.thenApply`方法将结果转换为List<Integer>。最后,我们使用`CompletableFuture.join`方法获取最终结果。
注意,在这个例子中,我们使用了`ExecutorService`来创建线程池,并将其传递给`CompletableFuture.supplyAsync`方法。这样可以确保任务在线程池中执行,而不是在默认的ForkJoinPool中执行。
阅读全文