【问题标题】:How to propagate exception from thread in java?如何从java中的线程传播异常?
【发布时间】:2012-06-28 13:49:20
【问题描述】:

代码:

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

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

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

这可能吗?如果不是,有什么更好的方法来做到这一点?

谢谢。

【问题讨论】:

    标签: java multithreading exception methods outer-join


    【解决方案1】:

    来自this API doc

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        你必须在运行方法中处理异常:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-08
          • 2010-09-18
          • 2012-03-18
          • 2012-07-17
          • 2010-11-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多