如何从父线程中检测到异常?

5

我正在向一个ExecutorService提交线程。

这些线程正在操作一些数据,如果发生冲突,数据对象将抛出异常,该异常被冲突线程捕获,然后中止并且未能完成执行。

当这种情况发生时,中止的线程需要放回队列并重新提交到执行器。

如何从父线程中检测是否发生了异常?

1个回答

11

ExecutorService提交任务时会返回一个Future,等待执行完成后,可以调用该Futureget()方法获取结果。如果有适用的结果,则返回结果,否则将抛出ExecutionException。如果需要真正的异常对象,可以使用getCause()方法。

注意,将任务放回ExecutorService时,该任务将在一个未真正终止的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
我对Java非常陌生。您能否使用这些调用绘制出一个最基本的示例? - temporary_user_name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接