2016-08-06 10 views
2

getPriceメソッドをproductの中でproductsに並列呼び出ししようとしています。私はこのコードを持っていて、別のスレッドでgetPriceが実行されていることを確認しましたが、並列ではなく順次実行しています。誰も私がここに何が欠けていることを指摘してくれる?CompletablFutureおよびExecutorServiceと並行してメソッドを呼び出す

ありがとうございました。

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()); 

答えて

4

あなたは、あなたのプロダクトをストリーミングCompletableFutureへのそれぞれを送信するが、それは参加してのためのストリームは、次のいずれかを処理する前に、その後、待機しています。

なぜ使用しない:

products.parallelStream() 
.map(p -> getPrice(p.getId(), date, context)) 
.collect(Collectors.<Product>toSet()); 
+0

は、おかげでたくさんparallelStream、知りませんでした! –

関連する問題