Running Async FeatureTask in Java stream

105 Views Asked by At

I'm using Java-Streams to run FutureTasks and get the results.

It generally runs ok. But in recent days, if the API calls are frequent, the system blocks.

What might be a reason of this problem?

Code:

private List<ItemPriceVO> calculateItemPrices(PricingRequest request) {
    return request.getItemCodes()
        .stream()
        .map(itemCode -> executorService.submit(new TracerCallable<ItemPriceVO>() {
                @Override public ItemPriceVO doCall() throws Exception {
                    return calculateItemPrice(itemCode, request);
                }
            })
        ).map(future -> {
            try {
                return future.get();
            } catch (InterruptedException | ExecutionException e) {
                logger.error("calculate module price error, request:" + request, e);
                return null;
            }
        })
        .filter(Objects::nonNull)
        .collect(Collectors.toList());
}

Stack-trace:

"http-nio-7001-exec-250" #4853 daemon prio=5 os_prio=0 tid=0x00002afcc00f1800 nid=0x7a6a waiting on condition [0x00002afdb7c36000]
   java.lang.Thread.State: WAITING (parking)
  at sun.misc.Unsafe.park0(Native Method)
  - parking to wait for  <0x00000006e876dbf8> (a java.util.concurrent.FutureTask)
  at sun.misc.Unsafe.park(Unsafe.java:1025)
  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:176)
  at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
  at java.util.concurrent.FutureTask.get(FutureTask.java:191)
  at com.alibaba.ons.open.web.channelbizfrt.pricing.PricingBizService.lambda$calculateItemPrices$56(PricingBizService.java:218)
  at com.alibaba.ons.open.web.channelbizfrt.pricing.PricingBizService$$Lambda$171/304812073.apply(Unknown Source)
  at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
  at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
  at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
  at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
  at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
  at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
  at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
  at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
  at com.alibaba.ons.open.web.channelbizfrt.pricing.PricingBizService.calculateItemPrices(PricingBizService.java:225)
  at com.alibaba.ons.open.web.channelbizfrt.pricing.PricingBizService.calculate(PricingBizService.java:124)
  at com.alibaba.ons.open.web.channelbizfrt.pricing.PricingBizService$$FastClassBySpringCGLIB$$7f5d865.invoke(<generated>)
0

There are 0 best solutions below