我有一个 Shipment 对象的列表,我需要调用 API 来获取有关每个 Shipment 的一些信息。我正在尝试并行进行这些网络调用。所以我正在使用 Java 8parallelStream()
并将其提交给ForkJoinPool
如下自定义:
@Autowired
ForkJoinPool forkJoinPool;
...
public void someMethod(){
...
List<MyObj> myObjList = null;
try {
myObjList = forkJoinPool.submit(() -> shipmentList.parallelStream()
.map(shipment -> getShipmentInfo(shipment))
.collect(Collectors.toList())
).get();
} catch (Exception e){
...
}
}
public MyObj getShipmentInfo(Shipment shipment) {
// Make network call and return MyObj
}
我有两个问题:
- 我想优化我的线程数
ForkJoinPool
,所以我需要检查它的执行情况。如果请求没有被池立即处理和处理,我是否可以记录? - 我的系统流量很大。因此,如果我执行 a
submit()
andget()
on anautowired ForkJoinPool
,我的代码会等待来自不同请求的 Shipments 吗?我的意思是,假设我同时收到 2 个请求。Request1 有 3 个 Shipments 与之关联,Request2 有 5 个 Shipments。那么上面的代码会等到所有 8 次发货完成吗?
谢谢。