rai*_*mar 14 java executorservice java.util.concurrent
想通过ExecutorService的 invokeAll(..)方法运行Runnable任务的集合.但是现在不支持(仅支持可调用任务的集合)
有什么具体的原因吗?做类似事情的替代方法是什么.
rai*_*mar 25
Runnable task = new Runnable() {
public void run() {
}
};
Callable<Object> c = Executors.callable(task);
Run Code Online (Sandbox Code Playgroud)
刚刚发现,Executors提供了将Runnable任务转换为Callable任务的实用工具方法.这就解释了为什么我们没有重载带有Runnable任务的invokeAll.
JB *_*zet 14
只需将runnable转换为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;
}
};
}
Run Code Online (Sandbox Code Playgroud)