如何从父线程中注意到异常?

时间:2012-12-10 07:37:40

标签: java multithreading exception-handling executorservice

我正在将线程投入ExecutorService

这些线程正在操纵某些数据,如果存在冲突,数据对象会抛出异常,该异常会被冲突的线程捕获,而后者又会中止并且不会完成执行。

当发生这种情况时,需要将中止线程放回队列并反馈给执行程序。

如何从父线程中判断是否抛出了异常?

1 个答案:

答案 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}}