- 异常处理不是为了处理与异步事件(例如,磁盘I/O完成、网络消息到达、鼠标点击和击键)相关的问题而设计的,异步事件与程序的控制流并行且独立于程序的控制
异常处理如何不是为处理异步事件而设计的?为什么会出现这种情况
如果你用非常详细的例子来强化你的答案,我将不胜感激。
我认为这是一个误导性的说法。
异步工作是通过Java中的线程(或进程,但这是另一回事)完成的。
事实是,如果您启动一个线程,并且在该线程中抛出异常,那么您将无法从主线程中捕获它。
但是没有什么可以阻止您在那个新线程中处理异常。
示例-下面的代码打印Exception was raised in the thread but we can still handle it
:
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本身中添加一些异常捕获逻辑。