@SneakyThrows @Override public SpuVO queryDetail(Long id) { //1.查询spu SpuVO spuVO = spuMapper.queryInfoById(id); if(spuVO == null){ //是否存在此商品 throw new MallException("商品已删除"); } //runAsync 异步执行任务 无返回值 //supplyAsync 异步执行任务 有返回值 //thenAccept(同步) thenAcceptAsync(异步) 消费上一步的结果 无返回值 //thenApply(同步) thenApplyAsync(异步)消费上一步的结果 有返回值 //thenRun 执行一个新的任务 无消费 无返回值 CompletableFuture<Void> spuAttrFuture = CompletableFuture.runAsync(() -> { //2.查询基本属性列表 List<SpuAttrValueVO> spuAttrList = spuAttrValueService.queryAttrListBySpuId(id); //跟据SpuId查询Spu属性 spuVO.setSpuAttrList(spuAttrList); //封装SpuVO },mallExecutor); CompletableFuture<Void> spuImgFuture = CompletableFuture.runAsync(() -> { //3.查询图片列表 List<String> spuImages = spuMapper.queryImagesBySpuId(id); spuVO.setImageList(spuImages); //查询Spu图片并进行封装 },mallExecutor); CompletableFuture<Void> skuFuture = CompletableFuture.supplyAsync(() -> { //4.查询sku列表 List<SkuVO> skuList = skuService.queryListBySpuId(id); spuVO.setSkuList(skuList); //查询Sku并封装,返回 return skuList; //thenAccept 消费上一步的结果 },mallExecutor).thenAcceptAsync((skuList) -> { //消费封装的Sku skuList.forEach(item -> { //5.查询sku销售属性列表 List<SkuAttrValueVO> skuAttrValueList = skuAttrValueService.queryListBySkuId(item.getSkuId()); item.setSkuAttrList(skuAttrValueList); //向每一个Sku中添加自己的属性 //6.查询sku图片列表 List<String> skuImages = skuService.queryImagesBySkuId(item.getSkuId()); item.setImageList(skuImages); //向每一个Sku中添加图片 }); },mallExecutor); //allOf等待所有任务完成 //anyOf等待任意一个任务完成 //get阻塞等待结果 CompletableFuture.allOf(spuAttrFuture,spuImgFuture,skuFuture).get(); //等待指定线程执行完毕, return spuVO;
标签:查询,skuList,item,CompletableFuture,id,spuVO From: https://www.cnblogs.com/lly-rainbow/p/17648651.html