异步线程编排
//异步@Overridepublic SkuItemVo item(Long skuId) throws ExecutionException, InterruptedException {SkuItemVo skuItemVo = new SkuItemVo();CompletableFuture<SkuInfoEntity> infoFuture = CompletableFuture.supplyAsync(() -> {//1.sku基本信息获取 pms_sku_infoSkuInfoEntity info = getById(skuId);skuItemVo.setInfo(info);retu info;}, executor);CompletableFuture<Void> saleFuture = infoFuture.thenAcceptAsync((res) -> {//spu的销售属性组合List<SkuItemSaleAttrsVo> saleAttrsVos = skuSaleAttrValueService.getSaleAttrsBySpuId(res.getSpuId());skuItemVo.setSaleAttr(saleAttrsVos);}, executor);CompletableFuture<Void> descFuture = infoFuture.thenAcceptAsync((res) -> {//spu的详细介绍SpuInfoDescEntity spuInfoDescEntity = spuInfoDescService.getById(res.getSpuId());skuItemVo.setDesp(spuInfoDescEntity);}, executor);CompletableFuture<Void> baseFuture = infoFuture.thenAcceptAsync((res) -> {//规格参数List<SpuItemAttrGroupVo> attrGroupVos = attrGroupService.getAttrGroupWithAttrsBySpuId(res.getSpuId(), res.getCatalogId());skuItemVo.setGroupAttrs(attrGroupVos);}, executor);CompletableFuture<Void> imgFuture = CompletableFuture.runAsync(() -> {//sku图片信息 pms_sku_imagesList<SkuImagesEntity> images = imagesService.getImagesBySkuId(skuId);skuItemVo.setImagesEntites(images);}, executor);//查询当前商品是否是秒杀商品CompletableFuture<Void> seckillFuture = CompletableFuture.runAsync(() -> {R seckillInfo = seckillFeginService.getSkuSeckillInfo(skuId);if (seckillInfo.getCode() == 0) {SeckillInfoVo seckillInfoVo = seckillInfo.getData(new TypeReference<SeckillInfoVo>() {});skuItemVo.setSeckillInfo(seckillInfoVo);}},executor);//等待所有任务都完成CompletableFuture.allOf(saleFuture,descFuture,baseFuture,imgFuture,seckillFuture).get();retu skuItemVo;}
作者:志鸿鸣
来源链接:https://www.cnblogs.com/zhihongming/p/15600798.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。