gpt4 book ai didi

java - 为什么异常处理不能处理异步事件?

转载 作者:行者123 更新时间:2023-11-30 04:19:49 26 4
gpt4 key购买 nike

  • Exception handling is not designed to process problems associated with asynchronous events (e.g., disk I/O completions, network message arrivals, mouse clicks and keystrokes), which occur in parallel with, and independent of, the program’s flow of control.

为什么异常处理不是为处理异步事件而设计的?为什么会这样?

如果您通过非常详细的示例来增强您的答案,我将不胜感激。

最佳答案

我认为这是一个误导性的陈述。

异步工作是通过 Java 中的线程(或进程,但这是另一回事)完成的。

事实是,如果您启动一个线程并且该线程中抛出异常,您将无法从主线程捕获它。

但是没有什么可以阻止您在该新线程中处理异常。

示例 - 下面的代码打印异常在线程中引发,但我们仍然可以处理它:

public static void main(String[] args) throws Exception {
Thread t = new Thread(new Runnable() {

@Override
public void run() {
throw new RuntimeException("oops");
}
});
t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {

@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Exception was raised in the thread but we can still handle it");
}
});

t.start();
}

或者,您可以在 Runnable 本身中添加一些异常捕获逻辑。

关于java - 为什么异常处理不能处理异步事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17365047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com