如何从线程在java中传播异常?(How to propagate exception from t

2019-09-18 14:28发布

码:

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

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

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

这可能吗? 如果没有,这将是一个更好的方式来做到这一点?

谢谢。

Answer 1:

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

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



Answer 2:

线程是一个单独的过程,你不能传播你的例外,其他线程,因为他们无法通过例外路线交谈。 然而,你可以使用线程间通信,你将有发生异常时进行逻辑处理的情况。



Answer 3:

从这个API文档

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



Answer 4:

你必须处理的run方法中的异常:

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


文章来源: How to propagate exception from thread in java?