【问题标题】:Java: Adding Future<obj> to a listJava:将 Future<obj> 添加到列表中
【发布时间】:2016-09-01 20:20:15
【问题描述】:

现在我已经掌握了并行检索对象的方法,如何将这些对象添加到列表中?

我有一个 Future&lt;Site&gt; 对象列表,我正试图将这些对象添加到 ArrayListSite 对象中。这是我的 for 循环。我可以在循环中添加一个打印语句,它显示Future&lt;Site&gt; 对象列表确实已填充,但是添加到现有列表(最后一行)不起作用。

List<Future<Site>> futures=threadmaker.invokeAll(active_sites.stream().map(site -> new TAG_SCANNER(site, loggr)).collect(Collectors.toList()));

//Now fetch all the results
for (Future<Site> result : futures) {
    //SOUND THE ALARMS (adding to existing list)
    alarm_sites.add(result.get());
}

编辑:

我认为 Future 的 get 方法是阻塞的,因为代码在返回结果之前不会继续。我的错误在于尝试添加到已经存在的列表中吗?

【问题讨论】:

  • “不起作用”是什么意思?有什么错误吗? alarm_sites的类型是什么?
  • @sidgate 这根本行不通。没有错误,也没有任何内容添加到列表中。 alarm_sites 是一个站点对象列表。一件有趣的事情是,我可以在 result.get() 上调用 Site 对象方法,并且这些方法可以正常运行。所以我的想法是futures 是一个List&lt;Future&lt;Site&gt;&gt;,当我遍历该列表时,result 应该是一个Future&lt;Site&gt; 对象,当我调用result.get() 时我应该收到一个Site 对象,我应该可以添加到我的列表中,alarm_sites

标签: java java-8 future futuretask


【解决方案1】:

由于某种原因,在我的 invokeall 命令后创建列表解决了我的问题。我不确定为什么预先存在的列表不起作用,但我现在将问题标记为已解决,稍后我会调查此问题,看看可能发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多