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

时间:2013-06-28 12:45:19

标签: java events asynchronous exception-handling

  
      
  • 异常处理不是为处理与异步事件(例如,磁盘I / O完成,网络消息到达,鼠标点击和击键)相关的问题而设计的,这些问题与程序的控制流并行,并且独立于程序的控制流。
  •   

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

如果你通过非常详细的例子来提高答案,我将感激不尽。

1 个答案:

答案 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本身中添加一些异常捕获逻辑。

相关问题