MST

星途 面试题库

面试题:Java中CompletableFuture的exceptionally方法如何处理异常

请阐述在Java的CompletableFuture中,exceptionally方法是怎样捕获和处理异步任务中抛出的异常的,并举例说明其基本使用场景。
36.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. exceptionally 方法捕获和处理异常的机制

在Java的 CompletableFuture 中,exceptionally 方法用于处理异步任务执行过程中抛出的异常。当 CompletableFuture 所代表的异步任务发生异常时,exceptionally 方法会被触发,它接收一个 Function 作为参数,这个 Function 的输入是异常对象,返回值是一个替代结果,用于在异步任务出现异常时作为返回值,从而避免任务因异常而终止并能提供一个合理的替代响应。

2. 基本使用场景举例

import java.util.concurrent.CompletableFuture;

public class CompletableFutureExample {
    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> {
            // 模拟可能抛出异常的异步任务
            if (Math.random() > 0.5) {
                throw new RuntimeException("任务执行出现异常");
            }
            return "任务正常完成";
        }).exceptionally(ex -> {
            System.out.println("捕获到异常: " + ex.getMessage());
            return "出现异常时的替代结果";
        }).thenAccept(System.out::println);
    }
}

在上述代码中:

  • CompletableFuture.supplyAsync 启动一个异步任务,该任务可能会随机抛出异常。
  • exceptionally 方法捕获到异步任务抛出的异常,打印异常信息,并返回一个替代结果。
  • thenAccept 方法用于接收最终的结果(无论是正常结果还是异常时的替代结果)并进行处理,这里是简单地打印输出。