CompletableFuture如何处理异常
时间: 2023-10-17 10:04:31 浏览: 48
CompletableFuture 可以通过 `exceptionally()` 方法处理异常。`exceptionally()` 方法接收一个函数作为参数,当 CompletableFuture 异常完成时,该函数会被调用,并返回一个新的 CompletableFuture,这个新的 CompletableFuture 会包含一个异常结果,而不是原来的正常结果。
下面是一个简单的示例:
```java
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
// 抛出一个异常
throw new RuntimeException("Exception occurred");
});
CompletableFuture<Integer> result = future.exceptionally(ex -> {
System.out.println("Exception occurred: " + ex.getMessage());
return 0; // 返回默认值
});
System.out.println(result.get()); // 输出 0
```
在这个示例中,我们使用 `supplyAsync()` 创建了一个 CompletableFuture,它会抛出一个运行时异常。然后我们调用 `exceptionally()` 方法处理异常,返回一个默认值。最后我们通过 `get()` 方法获取 CompletableFuture 的结果,输出默认值 0。
除了 `exceptionally()` 方法,还可以使用 `handle()` 方法处理异常。`handle()` 方法与 `exceptionally()` 方法类似,不同之处在于,它可以处理正常结果和异常结果。如果 CompletableFuture 正常完成,`handle()` 方法会被调用,并返回一个新的 CompletableFuture,这个新的 CompletableFuture 包含处理后的结果。如果 CompletableFuture 异常完成,`handle()` 方法也会被调用,并返回一个新的 CompletableFuture,这个新的 CompletableFuture 包含一个异常结果。