我正在尝试将任务提交给Java中的ExecutorService。它要么需要一个允许抛出异常的可调用对象,要么需要一个可运行的。我的用例就像傻瓜一样:我想安排一个抛出异常的任务,但是一个无效的方法。因此,我无法使用 Callable 或 Runnable,因为方法定义与我的用例不匹配。我还想从我提交后收到的未来传播我的例外。有什么想法吗?
您可以使用Callable<Void>
.显然,您无法实例化 Void 对象,而只需返回null
.
从Future<Void>
,你仍然可以调用get
,丢弃null
返回值。它将重新抛出任何异常作为ExecutionException
。
您可以使用Callable<Void>
(或任何其他类参数)并始终返回null
,在这种情况下,Future.get
将包装并重新抛出任务引发的任何异常,或者使用Callable<Throwable>
并让任务的主体
try {
// do stuff
} catch(Throwable t) {
return t;
}
return null;
在这种情况下,Future.get
将返回异常。在这两种情况下,成功的任务都将从其Future.get
返回null
。