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