java8的CompletableFuture 并发执行归并结果
时间: 2025-01-31 11:01:16 浏览: 49
### Java 8 CompletableFuture 并发执行与合并结果
#### 使用 `CompletableFuture` 实现并发任务
为了实现多个异步任务的并发执行并将这些任务的结果合并,可以利用 `CompletableFuture` 提供的方法。对于收集所有 `CompletableFuture` 的结果并将其合并成最终的结果集,这可以通过流式处理来完成[^1]。
下面是一个简单的例子展示如何创建几个返回不同类型结果的任务,并通过 `allOf()` 方法等待所有的任务都完成后获取各自的结果:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class CompletableFutureExample {
private static Integer taskA() {
System.out.println("Task A is running...");
try { Thread.sleep(100); } catch (InterruptedException e) {}
return 42;
}
private static String taskB() {
System.out.println("Task B is running...");
try { Thread.sleep(150); } catch (InterruptedException e) {}
return "Answer";
}
public static void main(String[] args) throws Exception {
List<CompletableFuture<?>> futures = new ArrayList<>();
// 创建两个 completable future 对象代表不同的异步操作
CompletableFuture<Integer> cfA = CompletableFuture.supplyAsync(() -> taskA());
CompletableFuture<String> cfB = CompletableFuture.supplyAsync(() -> taskB());
// 添加到列表中以便稍后一起处理
futures.add(cfA);
futures.add(cfB);
// 使用 allOf 来确保所有给定的 CompletableFutures 都已完成
CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
// 当所有任务完成时继续执行后续逻辑
allDoneFuture.join();
// 获取各个任务的具体结果
Object resultA = cfA.get();
Object resultB = cfB.get();
System.out.printf("Results are: %s and '%s'\n", resultA, resultB);
}
}
```
这段代码展示了如何定义两个模拟耗时较长的操作作为独立的任务,并使用 `supplyAsync()` 将其转换为 `CompletableFuture` 类型的对象。之后,这两个对象被放入集合并通过调用 `allOf()` 方法确保两者均被执行完毕后再取回各自的计算成果[^2]。
值得注意的是,在实际应用中应当考虑异常情况的发生以及可能存在的性能优化需求;此外还可以探索其他方法如 `anyOf()` 或者更复杂的组合方式来满足特定场景下的业务需求。
阅读全文
相关推荐


















