我有一个程序,它使用我传递callables
的executorService
。
每个都是实现java.util.concurrent.Callable
的一个类的对象。
然后调用executorService
。java.lang.NoClassDefFoundError
在 call()
方法中的一个可调用对象中间抛出。
但是,它不会终止,也不会记录在控制台上。因此,无法知道程序是否正常工作。请提出任何我可以理解的方式。
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()
捕获它后,它将为我们获取导致错误/异常的实际对象。