如何在java中传播线程中的异常?

时间:2012-06-27 07:03:08

标签: java multithreading exception methods outer-join

代码:

    outerMethod {
        @Override
        public void run() {
                innerMethod throws IOException
                }
    }

在线程中抛出的方法抛出已检查的异常 - IOException。 我需要在主线程中处理此异常。 喜欢:

outerMethod() throws IOException
   {
        @Override
        public void run() {
                innerMethod() throws IOException
                }
    }

这可能吗?如果不是,那么更好的方法是什么?

感谢。

4 个答案:

答案 0 :(得分:5)

使用FutureTask http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/FutureTask.html#get%28%29。它的get方法将封装可能在另一个线程上运行的任务的任何异常。

  

ExecutionException:尝试检索通过抛出异常而中止的任务的结果时抛出异常。可以使用Throwable.getCause()方法检查此异常。

答案 1 :(得分:3)

线程是一个单独的进程,您无法将异常传播到其他线程,因为它们无法通过异常路由进行通信。但是,您可以使用线程间通信,并且在发生异常时必须以逻辑方式处理该情况。

答案 2 :(得分:3)

来自this API doc

如果线程已经定义了UncaughtExceptionHandler,它将被调用, 如果已定义,将调用其他线程组的UncaughtExceptionHandler, 否则它可以转发到默认的未捕获异常处理程序。

答案 3 :(得分:0)

您必须在run方法中处理异常:

        @Override
        public void run() {
           try {
              innerMethod();
           } catch (Exception e) {
             //handle e
           }