gpt4 book ai didi

java - CompletableFuture 和异常(exception) - 这里缺少什么?

转载 作者:行者123 更新时间:2023-11-30 05:36:17 28 4
gpt4 key购买 nike

当我试图理解异常功能时,我读了几篇blogsposts ,但我不明白这段代码有什么问题:

 public CompletableFuture<String> divideByZero(){
int x = 5 / 0;
return CompletableFuture.completedFuture("hi there");
}

我以为用exceptionallyhandle调用divideByZero方法时能够捕获异常,但是程序只需打印堆栈跟踪并退出。

我尝试了两者或处理异常(exception):

            divideByZero()
.thenAccept(x -> System.out.println(x))
.handle((result, ex) -> {
if (null != ex) {
ex.printStackTrace();
return "excepion";
} else {
System.out.println("OK");
return result;
}

})

但结果总是:

Exception in thread "main" java.lang.ArithmeticException: / by zero

最佳答案

当您调用 divideByZero() 时,代码 int x = 5/0; 立即在调用者的线程中运行,这解释了为什么它按照您的描述失败(甚至在创建 CompletableFuture 对象之前就会引发异常)。

如果您希望在未来的任务中运行除以零的操作,您可能需要将方法更改为如下所示:

public static CompletableFuture<String> divideByZero() {
return CompletableFuture.supplyAsync(() -> {
int x = 5 / 0;
return "hi there";
});
}

线程“main”java.util.concurrent.ExecutionException中的异常:java.lang.ArithmeticException:/由零结束(由java.lang.ArithmeticException:/by引起)零)

关于java - CompletableFuture 和异常(exception) - 这里缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56542521/

28 4 0