我正在将线程投入ExecutorService
。
这些线程正在操纵某些数据,如果存在冲突,数据对象会抛出异常,该异常会被冲突的线程捕获,而后者又会中止并且不会完成执行。
当发生这种情况时,需要将中止线程放回队列并反馈给执行程序。
如何从父线程中判断是否抛出了异常?
答案 0 :(得分:11)
当你submit()
ExecutorService
上的任务时,你得到了一个未来的结果。执行完成后,您可以在该未来致电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.
}
。)
{{1}}