2016-08-06 4 views
2

getPrice 메서드에 대한 호출을 productproducts에 각각 호출하려고합니다. 이 코드 조각을 가지고 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에 대해 알고하지 않았나요 , 덕분에 많이! –