Concurrency invokeAll()是否停止主线程?

Concurrency invokeAll()是否停止主线程?,concurrency,java-8,invokeall,Concurrency,Java 8,Invokeall,我想知道主线程是否会等到invokeAll()参数中的所有任务完成后才继续。这是我的代码,看起来确实如此 public static void main(String[] args) throws InterruptedException { ExecutorService service = null; try { service = Executors.newCachedThreadPool(); List<Callable&l

我想知道主线程是否会等到invokeAll()参数中的所有任务完成后才继续。这是我的代码,看起来确实如此

public static void main(String[] args) throws InterruptedException {

    ExecutorService service = null;
    try
    {
        service = Executors.newCachedThreadPool();
        List<Callable<?>> list = new ArrayList<>();
        for(int i = 0; i < 1000; i++)
        {
            list.add(() -> {System.out.println("Not yet"); return null;});
        }
        service.invokeAll(list);
        System.out.println("END!"); // Output "END" at last no matter what
    }
    finally
    {
        if(service != null)
        {
            service.shutdown();
        }
    }
}
publicstaticvoidmain(String[]args)抛出InterruptedException{
ExecutorService=null;
尝试
{
service=Executors.newCachedThreadPool();
列出文件状态(重点是我的):

执行给定的任务,返回保存任务的未来列表 全部完成时的状态和结果

对于设计用于运行任务的每种方法(重点是我的):

方法
invokeAny
invokeAll
执行最常用的表单 批量执行,执行一组任务,然后等待 至少一次或全部完成

至少有一个用于
invokeAny()
,所有用于
invokeAll()。

这是
invokeAll(…)
的说明(插入我的注释):

执行给定的任务,当所有任务完成时,返回一个保存其状态和结果的未来列表

注:“全部完成时”…不在此之前

Future.isDone()
对于返回列表的每个元素都是true

这意味着任务已经完成

请注意,已完成的任务可以正常终止,也可以通过引发异常终止。如果在此操作进行期间修改了给定集合,则此方法的结果将是未定义的

参数:任务-任务的集合

返回:表示任务的
Futures
列表,其顺序与迭代器为给定任务列表生成的顺序相同,每个任务列表都已完成

再一次…它说任务已经完成了



简而言之,它表示<任务> >代码>调用()/代码>返回之前的任务<>强>三次。

不,有<代码>等待终止()/>代码。但是如果是这样的话,那么为什么我的程序最后总是输出“结束”。如果“结束”在中间某个地方,它会更有意义吗?