我正在将线程提供给 ExecutorService
。
这些线程正在处理一些数据,如果发生冲突,数据对象会抛出一个异常,该异常会被冲突的线程捕获,然后中止并且不会完成执行。
发生这种情况时,需要将中止线程放回队列中并反馈给执行器。
如何判断父线程是否抛出异常?
最佳答案
当您在 ExecutorService
上submit()
一个任务时,您会得到一个 Future 作为结果。执行完成后,您可以在那个 future 调用 get()
。如果适用,这将返回结果,或者如果原始任务抛出一个,它将抛出一个 ExecutionException
。如果您想要真正的异常对象,您可以执行 getCause()
。
另请注意,您会将 Task
放回服务中,该任务在 Thread
上运行,该线程尚未真正终止(只是捕获异常并且是等待新的)。
这是一个示例用法(如果您不关心结果,可以使用 Runnable
)。
Callable<String> myCallable = ...;
Future<String> future = myExector.submit(myCallable);
// Do something else until myCallable.isDone() returns true.
try {
String result = future.get();
}catch(ExecutionException e){
// Handle error, perhaps create new Callable to submit.
}
关于java - 如何从父线程中注意到异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13796767/