ExecutorService.invokeAll does NOT support collection of runnable task

浪子不回头ぞ 提交于 2019-11-27 22:56:36

Simply transform the runnables into callables:

List<Callable<Void>> callables = new ArrayList<>();
for (Runnable r : runnables) {
    callables.add(toCallable(r));
}
executor.invokeAll(callables);

private Callable<Void> toCallable(final Runnable runnable) {
    return new Callable<Void>() {
        @Override
        public Void call() {
            runnable.run();
            return null;
        }
    };
}
Runnable task = new Runnable() { 
     public void run() {

     }
};

Callable<Object> c = Executors.callable(task);

Just found that, Executors provides utility method to convert Runnable task into a Callable task. That explains why we don't have overloaded invokeAll which takes Runnable task as well.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!