【发布时间】:2016-09-01 20:20:15
【问题描述】:
现在我已经掌握了并行检索对象的方法,如何将这些对象添加到列表中?
我有一个 Future<Site> 对象列表,我正试图将这些对象添加到 ArrayList 的 Site 对象中。这是我的 for 循环。我可以在循环中添加一个打印语句,它显示Future<Site> 对象列表确实已填充,但是添加到现有列表(最后一行)不起作用。
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<Future<Site>>,当我遍历该列表时,result应该是一个Future<Site>对象,当我调用result.get()时我应该收到一个Site对象,我应该可以添加到我的列表中,alarm_sites。
标签: java java-8 future futuretask