import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureSumExample {
public static void main(String[] args) {
List<CompletableFuture<Integer>> futures = new ArrayList<>();
// 模拟添加多个CompletableFuture任务
futures.add(CompletableFuture.supplyAsync(() -> {
// 模拟一些计算
return 10;
}));
futures.add(CompletableFuture.supplyAsync(() -> {
// 模拟一些计算
return 20;
}));
futures.add(CompletableFuture.supplyAsync(() -> {
// 模拟抛出异常
throw new RuntimeException("模拟异常");
}));
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
allFutures.thenRun(() -> {
int sum = 0;
for (CompletableFuture<Integer> future : futures) {
try {
sum += future.get();
} catch (InterruptedException | ExecutionException e) {
// 优雅地处理异常,这里可以记录日志等
System.out.println("处理任务异常: " + e.getMessage());
}
}
System.out.println("结果总和: " + sum);
}).exceptionally(ex -> {
// 处理allOf过程中的异常
System.out.println("处理allOf异常: " + ex.getMessage());
return null;
});
}
}
- 创建任务列表:首先创建一个
List<CompletableFuture<Integer>>
来存储所有的任务。
- 添加任务:向列表中添加多个
CompletableFuture
任务,这些任务会异步执行并返回整数结果。其中一个任务模拟抛出异常。
- 使用
allOf
等待所有任务完成:CompletableFuture.allOf
方法会返回一个新的CompletableFuture
,当所有传入的CompletableFuture
都完成时,这个新的CompletableFuture
也完成。
- 在所有任务完成后计算总和:使用
thenRun
方法,在所有任务完成后执行计算总和的操作。在计算总和过程中,使用try - catch
块捕获每个任务可能抛出的异常并进行处理。
- 处理
allOf
过程中的异常:使用exceptionally
方法,处理allOf
过程中可能出现的异常,例如某个任务执行时出现了未处理的异常导致allOf
失败。