1. 程式人生 > 其它 >非同步執行緒編排

非同步執行緒編排

//非同步
@Override
public SkuItemVo item(Long skuId) throws ExecutionException, InterruptedException {
SkuItemVo skuItemVo = new SkuItemVo();
CompletableFuture<SkuInfoEntity> infoFuture = CompletableFuture.supplyAsync(() -> {
//1.sku基本資訊獲取 pms_sku_info
SkuInfoEntity info = getById(skuId);
skuItemVo.setInfo(info);
return 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_images List<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(); return skuItemVo; }