CompletableFuture.allOf 异常处理
时间: 2024-01-18 12:18:04 浏览: 327
CompletableFuture 异步处理
CompletableFuture.allOf方法用于组合多个CompletableFuture对象,并在所有任务完成后返回一个新的CompletableFuture对象。然而,CompletableFuture.allOf方法本身并不处理异常,它只是等待所有任务完成。
要处理CompletableFuture.allOf方法中的异常,可以使用whenComplete方法。whenComplete方法可以在任务完成时触发回调函数,无论是正常完成还是发生异常。通过在whenComplete方法中处理异常,我们可以确保异常得到正确的传播和处理。
下面是一个示例代码,演示了如何使用CompletableFuture.allOf方法和whenComplete方法来处理异常:
```java
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
// 任务1
throw new RuntimeException("Oops!");
});
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
// 任务2
return 42;
});
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2);
CompletableFuture<String> result = allFutures.thenApply(v -> {
// 所有任务完成后的处理
if (future1.isCompletedExceptionally()) {
// 处理任务1的异常
Throwable ex = future1.getCompletionException();
System.out.println("Error occurred in future1: " + ex);
return "Error";
} else if (future2.isCompletedExceptionally()) {
// 处理任务2的异常
Throwable ex = future2.getCompletionException();
System.out.println("Error occurred in future2: " + ex);
return "Error";
} else {
// 所有任务正常完成
return "Success";
}
});
result.join(); // 等待结果
```
在上面的代码中,我们使用CompletableFuture.allOf方法组合了future1和future2,并使用thenApply方法处理所有任务完成后的结果。在thenApply方法中,我们通过判断每个任务是否发生异常来处理异常情况,并返回相应的结果。
阅读全文