获取多个CompletableFuture结果
时间: 2023-10-17 11:11:33 浏览: 69
可以使用CompletableFuture的静态方法allOf()或anyOf()来获取多个CompletableFuture的结果。
allOf()方法接收一个可变参数的CompletableFuture数组,返回一个新的CompletableFuture,该CompletableFuture的结果将在所有输入CompletableFuture都完成后完成,其结果是一个Void类型的值。
例如,以下代码创建了三个CompletableFuture,通过allOf()方法等待所有三个任务完成后输出结果:
```
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "world");
CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> "!");
CompletableFuture<Void> allFuture = CompletableFuture.allOf(future1, future2, future3);
allFuture.join(); // 等待所有任务完成
System.out.println(future1.get() + future2.get() + future3.get()); // 输出结果:Hello world!
```
anyOf()方法接收一个可变参数的CompletableFuture数组,返回一个新的CompletableFuture,该CompletableFuture的结果将在任意一个输入CompletableFuture完成后完成,其结果是第一个完成的任务的结果。
例如,以下代码创建了两个CompletableFuture,通过anyOf()方法等待任意一个任务完成后输出结果:
```
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello";
});
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "world");
CompletableFuture<Object> anyFuture = CompletableFuture.anyOf(future1, future2);
anyFuture.join(); // 等待任意一个任务完成
System.out.println(anyFuture.get()); // 输出结果:Hello
```
需要注意的是,allOf()和anyOf()方法都是非阻塞的,它们返回的CompletableFuture对象可以用来等待结果的完成,也可以用来执行后续的操作。
阅读全文