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


  • 异常处理不是为了处理与异步事件(例如,磁盘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本身中添加一些异常捕获逻辑。

相关内容

  • 没有找到相关文章

最新更新