MST

星途 面试题库

面试题:Java中CompletableFuture的thenAcceptAsync方法异常处理

假设你正在使用CompletableFuture的thenAcceptAsync方法处理一系列异步任务。在计算任务执行过程中,可能会抛出各种异常(如算术异常、空指针异常等)。请编写代码实现:当计算任务抛出异常时,在thenAcceptAsync的回调中捕获异常并进行合理处理,向调用者返回友好的错误信息。阐述你在处理异常时对不同类型异常的区分处理思路。
19.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.concurrent.CompletableFuture;

public class CompletableFutureExceptionHandling {
    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> {
            // 模拟可能抛出异常的计算任务
            int result = 10 / 0; // 这里会抛出算术异常
            return result;
        })
       .thenAcceptAsync(result -> {
            System.out.println("计算结果: " + result);
        })
       .exceptionally(ex -> {
            if (ex instanceof ArithmeticException) {
                System.out.println("捕获到算术异常: " + ex.getMessage());
                return "很抱歉,发生了算术错误,请检查输入。";
            } else if (ex instanceof NullPointerException) {
                System.out.println("捕获到空指针异常: " + ex.getMessage());
                return "很抱歉,发生了空指针错误,请检查相关对象是否为空。";
            } else {
                System.out.println("捕获到其他异常: " + ex.getMessage());
                return "很抱歉,发生了未知错误,请联系管理员。";
            }
        })
       .thenAccept(System.out::println);
    }
}

异常区分处理思路

  1. 算术异常(ArithmeticException):通常是由于数学运算错误导致,如除数为零。在处理这类异常时,返回提示用户检查输入的友好错误信息,因为这类异常往往与输入数据有关。
  2. 空指针异常(NullPointerException):这通常是因为代码尝试访问空对象的属性或方法。处理这类异常时,提示用户检查相关对象是否为空,引导用户关注代码中对象的初始化和赋值情况。
  3. 其他异常:对于其他类型的异常,由于无法确切知道异常产生的原因,返回通用的让用户联系管理员的友好错误信息,以便进一步排查问题。通过这种方式,能针对不同类型异常给调用者提供更有针对性的错误提示,帮助其更快定位和解决问题。