Concurrency invokeAll()是否停止主线程?
我想知道主线程是否会等到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
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
列表,其顺序与迭代器为给定任务列表生成的顺序相同,每个任务列表都已完成
再一次…它说任务已经完成了
简而言之,它表示<任务> >代码>调用()/代码>返回之前的任务<>强>三次。
不,有<代码>等待终止()/>代码。但是如果是这样的话,那么为什么我的程序最后总是输出“结束”。如果“结束”在中间某个地方,它会更有意义吗?