我有一个主线程,它创建了许多工作人员,每个工作人员都是一个线程。
如果某些工作人员出现异常或工作人员无法成功结束,我如何从主线程中的工作人员那里获取错误?
如何在工作线程死亡之前发送错误?
我有一个主线程,它创建了许多工作人员,每个工作人员都是一个线程。
如果某些工作人员出现异常或工作人员无法成功结束,我如何从主线程中的工作人员那里获取错误?
如何在工作线程死亡之前发送错误?
如果您使用 java.util.concurrent Executor 框架并从每个提交的工作人员生成一个 Future,那么在 Future 上调用 get() 将给您工作人员的结果,或者在该工作人员中抛出/捕获的异常。
您可以设置全局 UncaughtExceptionHandler 它将拦截所有线程中的所有未捕获异常
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
...
}
});
实现此目的的一种方法是使用线程中的信号传递。当您需要线程之间进行通信时,信号传递被广泛使用。实现这一点的简单方法是访问线程之间的共享对象并监视对象的值(信号指示)。您可以为指示失败的对象分配一些值(以信号的形式),以便其他线程可以采取适当的措施。
使用信号,您不仅可以传递失败信号,还可以传递各种其他状态信号,方法是为共享对象设置适当的值(比如 Enum 具有不同的值指示线程的状态)。
有关更多详细信息,请参阅此链接:http://tutorials.jenkov.com/java-concurrency/thread-signaling.html
使用ExecutorService或ThreadPoolExecutor
您可以通过三种方式捕获异常
run() or call()
方法包装在try{}catch{}Exceptoion{}
块中afterExecute
方法 有关详细信息,请参阅以下 SE 问题: