与 CompletablFuture 和 ExecutorService 并行调用方法

J.H*_*J.H 2 executorservice java-8 completable-future

我正在尝试对中的getPrice每个方法进行并行调用。我有这段代码并验证了 getPrice 正在单独的线程中运行,但它们是按顺序运行的,而不是并行运行的。谁能指出我在这里缺少什么吗?productproducts

非常感谢你的帮助。

   ExecutorService service = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
   Set<Product> decoratedProductSet = products.stream()
   .map(product -> CompletableFuture
                             .supplyAsync(() -> getPrice(product.getId(), date, context), service))
   .map(t -> t.exceptionally(throwable -> null))
   .map(t -> t.join())
   .collect(Collectors.<Product>toSet());
Run Code Online (Sandbox Code Playgroud)

P.J*_*sch 5

您正在流式传输您的产品,将每个产品发送到 a CompletableFuture,然后通过 join 等待它,然后流处理下一个产品。

为什么不使用:

products.parallelStream()
 .map(p -> getPrice(p.getId(), date, context))
 .collect(Collectors.<Product>toSet());
Run Code Online (Sandbox Code Playgroud)