Java多线程错误处理

Java多线程错误处理,java,multithreading,error-handling,Java,Multithreading,Error Handling,我有一个主线程,它创建了许多工作线程,每个工作线程都是一个线程 如果某个工作线程中出现异常或工作线程无法成功结束,如何从主线程中的工作线程中获取错误 如何在工作线程死机之前发送错误?实现这一点的一种方法是使用信号传入线程。当需要线程相互通信时,信号传递被广泛使用。实现这一点的简单方法是访问线程之间的共享对象并监视对象的值(指示信号)。 您可以为表示故障的对象指定一些值(以信号的形式),以便其他线程可以采取适当的操作。 通过使用信号,您不仅可以传递故障信号,还可以通过为共享对象设置适当的值(例如,

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

如果某个工作线程中出现异常或工作线程无法成功结束,如何从主线程中的工作线程中获取错误


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

实现这一点的一种方法是使用信号传入线程。当需要线程相互通信时,信号传递被广泛使用。实现这一点的简单方法是访问线程之间的共享对象并监视对象的值(指示信号)。 您可以为表示故障的对象指定一些值(以信号的形式),以便其他线程可以采取适当的操作。
通过使用信号,您不仅可以传递故障信号,还可以通过为共享对象设置适当的值(例如,使用指示线程状态的不同值的枚举),传递各种其他状态信号。

有关更多详细信息,请参阅此链接:

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

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        ...
    }
});

如果使用java.util.concurrent Executor框架并从每个提交的worker生成一个Future,那么对Future调用get()将给出该worker的结果,或者在该worker中引发/捕获异常

使用或
ThreadPoolExecutor

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

  • .get()
  • 将整个
    run()或call()方法包装在
    try{}catch{}exception{}
    块中
  • 在执行后覆盖
  • 有关更多详细信息,请参阅以下问题:


    您应该查看和。你也可以使用,虽然,我会觉得有点脏…你也可以建立你自己的回调机制。看看你知道未来回溯界面吗?