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

Har*_*rsh 6 java concurrency future java-8 completable-future

我通过流式传输对象列表来调用异步客户端方法.该方法返回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());
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 6

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

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

这有点像这样:

forJoinPool.submit( () -> list.stream().parallel().map(future -> future.get()).collect(Collectors.toList())).get();
Run Code Online (Sandbox Code Playgroud)

我会选择这里显示的自定义池