我通过流式传输对象列表来调用异步客户端方法。该方法返回 Future。
迭代调用后返回的 Future 列表的最佳方法是什么(以便处理先出现的 Future)?
注意:异步客户端仅返回 Future,而不返回 CompletableFuture。
以下是代码:
List<Future<Object>> listOfFuture = objectsToProcess.parallelStream()
.map((object) -> {
/* calling an async client returning a Future<Object> */ })
.collect(Collectors.toList());
有了这个清单List<Future<Object>>
,我会将其提交到自定义池,而不是使用默认的流并行处理。
这是因为流 api 使用公共池进行并行处理,您将调用get
在这些 Future 上(如果处理需要大量时间) - 您将阻止应用程序中使用并行操作的所有其他流操作,直到完成此操作。
这有点像这样:
forJoinPool.submit( () -> list.stream().parallel().map(future -> future.get()).collect(Collectors.toList())).get();
我会选择如图所示的自定义池here https://stackoverflow.com/questions/21163108/custom-thread-pool-in-java-8-parallel-stream
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)