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; } }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216697.html原文链接:https://javaforall.net
