【问题标题】:ThreadPoolExcutor and invokeAll list orderThreadPoolExcutor 和 invokeAll 列表顺序
【发布时间】:2015-12-08 14:12:46
【问题描述】:

我正在处理ThreadPoolExcutor。 我想知道在invokeAll 方法中,我是否可以确定输出(Future 对象)的顺序与输入(Callable 列表)的顺序相同。

List<Future<T>> invokeAll(List<Callable<T>> tasks)

【问题讨论】:

    标签: java concurrency threadpoolexecutor


    【解决方案1】:

    保证返回的期货列表与您提供的列表迭代器具有相同的顺序。请注意,此方法仅在所有任务完成后返回。

    引用invokeAll(tasks)Javadoc:

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

    【讨论】:

    • “每个都完成”是什么意思?
    • @Tobia invokeAll 方法仅在所有任务完成后返回。
    • + 已完成的任务可以正常终止,也可以通过抛出异常终止。任务可能由于异常而完成,因此它可能没有“成功”。 Future 没有办法区分差异
    • 有:只需致电future.get()。你要么得到想要的结果,要么抓住ExecutionException
    猜你喜欢
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多