Java ExecutorService.invokeAll不支持可运行任务的集合
希望通过的invokeAll(..)方法运行可运行任务的集合。 但目前还不支持这一点(只支持可调用任务的集合)Java ExecutorService.invokeAll不支持可运行任务的集合,java,executorservice,java.util.concurrent,Java,Executorservice,Java.util.concurrent,希望通过的invokeAll(..)方法运行可运行任务的集合。 但目前还不支持这一点(只支持可调用任务的集合) 有什么具体原因吗?做类似事情的替代方法是什么。只需将可运行项转换为可调用项: List<Callable<Void>> callables = new ArrayList<>(); for (Runnable r : runnables) { callables.add(toCallable(r)); } executor.invokeAll
有什么具体原因吗?做类似事情的替代方法是什么。只需将可运行项转换为可调用项:
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;
}
};
}
List callables=new ArrayList();
for(Runnable r:runnables){
添加(toCallable(r));
}
执行人。调用所有(可调用);
私有可调用到可调用(最终可运行){
返回新的可调用(){
@凌驾
公开作废通知(){
runnable.run();
返回null;
}
};
}
Runnable task=new Runnable(){
公开募捐{
}
};
可调用c=执行者。可调用(任务);
刚刚发现,Executors提供了将Runnable任务转换为Callable任务的实用方法。这解释了为什么我们没有重载invokeAll,它也需要运行任务 太好了,这更像是一种黑客行为。Java有一套丰富的API,所以想知道是否有什么具体的原因可以省略这个方法?这就是Java在我们为ExecutorServiceJava提供runnable时所做的*
Runnable task = new Runnable() {
public void run() {
}
};
Callable<Object> c = Executors.callable(task);