6

我有一个主线程,它创建了许多工作人员,每个工作人员都是一个线程。

如果某些工作人员出现异常或工作人员无法成功结束,我如何从主线程中的工作人员那里获取错误?

如何在工作线程死亡之前发送错误?

4

4 回答 4

4

如果您使用 java.util.concurrent Executor 框架并从每个提交的工作人员生成一个 Future,那么在 Future 上调用 get() 将给您工作人员的结果,或者在该工作人员中抛出/捕获的异常。

于 2013-08-14T07:06:51.777 回答
2

您可以设置全局 UncaughtExceptionHandler 它将拦截所有线程中的所有未捕获异常

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        ...
    }
});
于 2013-08-14T07:03:29.680 回答
0

实现此目的的一种方法是使用线程中的信号传递。当您需要线程之间进行通信时,信号传递被广泛使用。实现这一点的简单方法是访问线程之间的共享对象并监视对象的值(信号指示)。您可以为指示失败的对象分配一些值(以信号的形式),以便其他线程可以采取适当的措施。
使用信号,您不仅可以传递失败信号,还可以传递各种其他状态信号,方法是为共享对象设置适当的值(比如 Enum 具有不同的值指示线程的状态)。
有关更多详细信息,请参阅此链接:http://tutorials.jenkov.com/java-concurrency/thread-signaling.html

于 2013-08-14T06:59:55.297 回答
0

使用ExecutorServiceThreadPoolExecutor

您可以通过三种方式捕获异常

  1. 未来.get()
  2. 将整个run() or call()方法包装在try{}catch{}Exceptoion{}块中
  3. ThreadPoolExecutor的重写 afterExecute方法

有关详细信息,请参阅以下 SE 问题:

处理 ThreadPoolExecutor 的异常

于 2016-07-14T12:57:27.477 回答