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