- 异常处理不是为处理与异步事件(例如,磁盘I / O完成,网络消息到达,鼠标点击和击键)相关的问题而设计的,这些问题与程序的控制流并行,并且独立于程序的控制流。
异常处理不是为处理异步事件而设计的?为什么会这样呢?
如果你通过非常详细的例子来提高答案,我将感激不尽。
答案 0 :(得分:2)
我认为这是一个误导性陈述。
异步工作是通过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本身中添加一些异常捕获逻辑。