1

我正在尝试向 Java 中的 ExecutorService 提交任务。它要么接受允许抛出异常的 Callable,要么接受 Runnable。我的用例很愚蠢:我想安排一个抛出异常的任务,但它是一个无效方法。结果,我不能使用 Callable 或 Runnable,因为方法定义与我的用例不匹配。我还想让我的异常从提交后收到的 Future 传播。有任何想法吗?

4

2 回答 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 回答