ExecutorService.invokeAll不支持可运行任务的收集

想通过ExecutorService的 invokeAll(..)方法运行Runnable任务的集合。 但是现在不支持( 仅支持可调用任务的集合

有什么具体的原因吗? 做类似事情的替代方案是什么。

只需将runnable转换为callables即可:

List> callables = new ArrayList<>(); for (Runnable r : runnables) { callables.add(toCallable(r)); } executor.invokeAll(callables); private Callable toCallable(final Runnable runnable) { return new Callable() { @Override public Void call() { runnable.run(); return null; } }; } 
 Runnable task = new Runnable() { public void run() { } }; Callable c = Executors.callable(task); 

刚发现, Executors提供了将Runnable任务转换为Callable任务的实用工具方法。 这就解释了为什么我们没有重载带有Runnable任务的invokeAll