5

我正在将线程喂入一个ExecutorService.

这些线程正在操作一些数据,如果发生冲突,数据对象会抛出异常,该异常会被冲突线程捕获,进而中止并且无法完成执行。

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

如何从父线程判断是否引发了异常?

4

1 回答 1

11

当您submit()执行一项任务时,ExecutorService您会得到一个 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.
}
于 2012-12-10T07:40:32.693 回答