CompletableFuture优化你的代码执行效率

2020-03-22  本文已影响0人  奔跑吧老王

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

@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

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

上一篇下一篇

猜你喜欢

热点阅读