首页 文章

在期货清单上流式传输的最有效方式

提问于
浏览
6

我通过流式传输对象列表来调用异步客户端方法 . 该方法返回Future .

迭代调用后返回的Futures列表的最佳方法是什么(以便处理那些首先出现的Future)?

注意:异步客户端仅返回Future not CompletableFuture .

以下是代码:

List<Future<Object>> listOfFuture = objectsToProcess.parallelStream()
    .map((object) -> {
        /* calling an async client returning a Future<Object> */ })
    .collect(Collectors.toList());

1 回答

  • 4

    有了这个 List<Future<Object>> 列表,我会将它提交给自定义池,而不是使用默认的流并行处理 .

    这是因为流api使用公共池进行并行处理,您将在那些Futures上调用 get (如果需要大量时间进行处理) - 您将阻止在您的应用程序中使用并行操作的所有其他流操作,直到完成此操作 .

    这有点像这样:

    forJoinPool.submit( () -> list.stream().parallel().map(future -> future.get()).collect(Collectors.toList())).get();
    

    我会选择如图所示的自定义池here

相关问题