美文网首页
CompletableFuture优化你的代码执行效率

CompletableFuture优化你的代码执行效率

作者: 奔跑吧老王 | 来源:发表于2020-03-22 13:39 被阅读0次

    CompletableFuture的API很丰富,本案例以提交订单为例:
    在微服务架构下,划分为很多的模块

    • 订单模块
    • 购物车模块
    • 商品模块
      1、spu模块
      2、sku模块
    • 积分模块
    • 优惠券模块
    • 用户模块
    • 附件模块
    • 消息模块等等
      在下订单时如何提高这些模块间的执行效率?
      该串行话为并行,CompletableFuture 很好解决了我们的问题,下面我以伪代码的方式进行讲述
      传统模式下:
    @RestController
    @RefreshScope
    public class OrderControler {
    
        @Autowired
        private SkuService skuService;
        @Autowired
        private SpuService spuService;
        @Autowired
        private PointService pointService;
        @Autowired
        private UserInfoService userService;
        @Autowired
        private MessageService messageService;
    
        @RequestMapping("/sync/order/sava")
        public String savaOrder(){
            System.out.println("创建订单开始");
            long start = System.currentTimeMillis();
            skuService.querySkuInfo();
            userService.queryUserInfo();
            spuService.querySpuInfo();
            pointService.queryPointInfo();
            messageService.queryMsgInfo();
            long end = System.currentTimeMillis();
            System.out.println("创建订单结束,共花费:"+(end-start));
            return "下单花费时间为:"+(end-start);
        }
        
    }
    
    image.png

    使用CompletableFuture之后:

    @RestController
    @RefreshScope
    public class OrderControler {
    
        @Autowired
        private SkuService skuService;
        @Autowired
        private SpuService spuService;
        @Autowired
        private PointService pointService;
        @Autowired
        private UserInfoService userService;
        @Autowired
        private MessageService messageService;
        
    
        @RequestMapping("/async/order/sava")
        public String savaOrderAsnc(){
            System.out.println("异步创建订单开始");
            long start = System.currentTimeMillis();
            CompletableFuture<Void> skuServiceFuture = CompletableFuture.runAsync(() -> {
                skuService.querySkuInfo();
            });
            CompletableFuture<Void> userServiceFuture = CompletableFuture.runAsync(() -> {
                userService.queryUserInfo();
            });
            CompletableFuture<Void>  spuServiceFuture = CompletableFuture.runAsync(() -> {
                spuService.querySpuInfo();
            });
            CompletableFuture<Void> pointServiceFuture = CompletableFuture.runAsync(() -> {
                pointService.queryPointInfo();
            });
            CompletableFuture<Void> messageServiceFuture = CompletableFuture.runAsync(() -> {
                messageService.queryMsgInfo();
            });
    
            CompletableFuture.allOf(
                    skuServiceFuture,
                    userServiceFuture,
                    spuServiceFuture,
                    pointServiceFuture,
                    messageServiceFuture).join();
            long end = System.currentTimeMillis();
            System.out.println("异步创建订单结束,共花费:"+(end-start));
            return "下单花费时间为:"+(end-start);
        }
    
    }
    
    
    image.png

    可见性能提升很明显,也进一步说明了木桶短板原理,提升性能就是解决短板问题。

    相关文章

      网友评论

          本文标题:CompletableFuture优化你的代码执行效率

          本文链接:https://www.haomeiwen.com/subject/vrhwyhtx.html