如果执行程序服务的某个可调用对象遇到错误,如何在控制台中记录错误



我有一个程序,它使用我传递callablesexecutorService

每个都是实现java.util.concurrent.Callable的一个类的对象。

然后调用executorServicejava.lang.NoClassDefFoundErrorcall() 方法中的一个可调用对象中间抛出。

但是,它不会终止,也不会记录在控制台上。因此,无法知道程序是否正常工作。请提出任何我可以理解的方式。

Callable 抛出异常,这不是 NoClassDefFoundError 的超类。在你的可调用中,捕获错误(甚至可抛出)并用异常包装它:

V call() throws Exception
{
    try
    {
       return this.doSomething();
    } catch (Error e) {
      e.printStackTrace();
      throw new Exception(e);
    }
}

为了将错误打印到控制台,您可以创建一个 Thread.UncaughtExceptionHander。将其传递到 Thread#setDefaultUncaughtThreadExceptionHandler 将导致在引发错误时调用处理程序。

有人已经发布了这个问题的答案,但是当我在验证后将其标记为答案时,不幸的是该帖子被删除了。我只是在重新输入答案。

调用调用方法

后由执行器服务返回的期货包含线程的所有 Future 对象。如果任何线程中出现任何问题,则会抛出java.util.concurrent.ExecutionException。当我们对未来执行get()时,可以在拥有执行器服务的父线程中检测到。然后e.getCause()捕获它后,它将为我们获取导致错误/异常的实际对象。

最新更新