Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ExecutorService.invokeAll不支持可运行任务的集合_Java_Executorservice_Java.util.concurrent - Fatal编程技术网

Java ExecutorService.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

希望通过的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);