栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java 7中是invokeAll()的阻塞调用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java 7中是invokeAll()的阻塞调用

执行给定的任务,并在所有任务完成时返回保存其状态和结果的期货列表。 Future.isDone()对于返回列表的每个元素为true。
请注意,已完成的任务可能已正常终止,也可能引发异常。如果在进行此操作时修改了给定的集合,则此方法的结果不确定。

期货只能在执行完成时完成,因此,只有在任务执行完毕后才能返回此方法。

它可以引发InterruptedException的情况也表示阻塞动作。

查看

invokeAll
in
java.util.concurrent.AbstractExecutorService
(注释内联)的实现:

public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)    throws InterruptedException {    if (tasks == null)        throw new NullPointerException();    ArrayList<Future<T>> futures = new ArrayList<Future<T>>(tasks.size());    boolean done = false;    try {        for (Callable<T> t : tasks) { RunnableFuture<T> f = newTaskFor(t); futures.add(f); execute(f);        }        for (int i = 0, size = futures.size(); i < size; i++) { Future<T> f = futures.get(i); if (!f.isDone()) {     try {         f.get(); // <== *** BLOCKS HERE ***     } catch (CancellationException ignore) {     } catch (ExecutionException ignore) {     } }        }        done = true;        return futures;    } finally {        if (!done) for (int i = 0, size = futures.size(); i < size; i++)     futures.get(i).cancel(true);    }}

实际上,在这些情况下,当Javadoc-Specese似乎难以破译时,通常应该看一下参考实现。(请注意,一些实现细节不是规范的一部分。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414237.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号