Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中从线程传播异常?_Java_Multithreading_Exception_Methods_Outer Join - Fatal编程技术网

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

如何在java中从线程传播异常?,java,multithreading,exception,methods,outer-join,Java,Multithreading,Exception,Methods,Outer Join,代码: 在线程中执行的方法抛出checked exception-IOException。 我需要在主线程中处理这个异常。 比如: 这可能吗?如果没有,有什么更好的方法可以做到这一点 谢谢。线程是一个单独的进程,您不能将您的异常传播到其他线程,因为它们无法通过异常路由进行通信。但是,您可以使用线程间通信,并且当异常发生时,您必须在逻辑上处理该情况。您必须在运行方法中处理异常: outerMethod() throws IOException { @Override

代码:

在线程中执行的方法抛出checked exception-IOException。 我需要在主线程中处理这个异常。 比如:

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


谢谢。

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

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

outerMethod() throws IOException
   {
        @Override
        public void run() {
                innerMethod() throws IOException
                }
    }
使用未来任务。它的get方法将封装任务中可能在另一个线程上运行的任何异常

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

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

@user710818:快来看看这个-
outerMethod() throws IOException
   {
        @Override
        public void run() {
                innerMethod() throws IOException
                }
    }
        @Override
        public void run() {
           try {
              innerMethod();
           } catch (Exception e) {
             //handle e
           }