我正在尝试使用Java向ExecutorService提交任务。它需要一个Callable,它允许抛出异常,或者它需要一个Runnable。我的用例是愚蠢的:我想安排一个抛出异常的任务,但是是一个void方法。因此,我不能使用Callable或Runnable,因为方法定义与我的用例不匹配。我还希望我的遗产在我提交后收到的未来传播。有什么想法吗?
答案 0 :(得分:3)
您可以使用Callable<Void>
。显然你无法实例化Void对象,只需返回null
。
从Future<Void>
,您仍然可以拨打get
,放弃null
返回值。它会将任何异常重新抛出为ExecutionException
。
答案 1 :(得分:1)
您可以使用Callable<Void>
(或实际上任何其他类参数)并始终返回null
,在这种情况下Future.get
将换行并重新抛出任何异常任务抛出,或使用Callable<Throwable>
并让你的任务正文
try {
// do stuff
} catch(Throwable t) {
return t;
}
return null;
在这种情况下,Future.get
将返回异常。在这两种情况下,成功的任务都会从null
返回Future.get
。