我正在将线程喂入一个ExecutorService
.
这些线程正在操作一些数据,如果发生冲突,数据对象会抛出异常,该异常会被冲突线程捕获,进而中止并且无法完成执行。
发生这种情况时,需要将正在中止的线程放回队列中并反馈给执行程序。
如何从父线程判断是否引发了异常?
我正在将线程喂入一个ExecutorService
.
这些线程正在操作一些数据,如果发生冲突,数据对象会抛出异常,该异常会被冲突线程捕获,进而中止并且无法完成执行。
发生这种情况时,需要将正在中止的线程放回队列中并反馈给执行程序。
如何从父线程判断是否引发了异常?
当您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.
}