我正在尝试向 Java 中的 ExecutorService 提交任务。它要么接受允许抛出异常的 Callable,要么接受 Runnable。我的用例很愚蠢:我想安排一个抛出异常的任务,但它是一个无效方法。结果,我不能使用 Callable 或 Runnable,因为方法定义与我的用例不匹配。我还想让我的异常从提交后收到的 Future 传播。有任何想法吗?
问问题
176 次
2 回答
3
您可以使用Callable<Void>
. 显然你不能实例化一个 Void 对象,而只是 return null
。
从Future<Void>
,您仍然可以调用get
,丢弃null
返回值。它会将任何异常重新抛出为ExecutionException
.
于 2012-10-21T17:58:25.190 回答
1
您可以使用Callable<Void>
(或实际上任何其他类参数)并始终 return null
,在这种情况下Future.get
将包装并重新抛出任务抛出的任何异常,或者使用Callable<Throwable>
并让您的任务主体成为
try {
// do stuff
} catch(Throwable t) {
return t;
}
return null;
在这种情况下Future.get
将返回异常。在这两种情况下,一个成功的任务都会null
从它的Future.get
.
于 2012-10-21T18:13:44.573 回答