ForkJoinPool infoForkJoinPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() * 2);
ForkJoinTask<Map<Long,InfoVO>> forkJoinTask = ThreadPoolManage.infoForkJoinPool.submit(new PriceTask(skuIds, 0, skuIds.size(),infoSoaService));
Map<Long,InfoVO> infoVOMap = forkJoinTask.join();
/**
* 多任务查询
*/
public class PriceTask extends RecursiveTask<Map<Long,InfoVO>> {
/**
* sku集合
*/
private Set<Long> skuIds;
/**
*
*/
private InfoSoaService infoSoaService;
/**
* 开始
*/
private int start;
/**
* 最大
*/
private int end;
/**
* 单次最多查询sku数量
*/
static final int THRESHOLD = 20;
public PriceTask(Set<Long> skuIds, int start, int end,InfoSoaService infoSoaService) {
this.skuIds = skuIds;
this.start = start;
this.end = end;
thisinfoSoaService = infoSoaService;
}
@Override
protected Map<Long, InfoVO> compute() {
if (end - start <= THRESHOLD) {
List<Long> skuList = new ArrayList<>(skuIds);
Response<Map<Long, InfoVO>> bySkuIds = infoSoaService.getInfoBySkuIds(buildCaller(), new HashSet<>(skuList.subList(start, end)));
return new HashMap<>(bySkuIds.getData());
}
int middle = (end + start) / 2;
PriceTask left = new PriceTask(skuIds, start, middle, infoSoaService);
PriceTask right = new PriceTask(skuIds, middle, end, infoSoaService);
invokeAll(left, right);
Map<Long,InfoVO> resultMap = new HashMap<>();
Map<Long, InfoVO> infoVOLeftMap = left.join();
Map<Long, InfoVO> infoVORightMap = right.join();
resultMap.putAll(infoVOLeftMap);
resultMap.putAll(infoVORightMap);
return resultMap;
}
}
ForkJoin调用接口
最新推荐文章于 2023-06-22 16:01:04 发布