美文网首页
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

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

相关文章

  • 7. 执行效率问题

    参考文章浅谈代码的执行效率(4):汇编优化

  • 【持续更新】Java代码优化总结

    代码优化的目标: 1. 减小代码体积 2. 增强代码可读性 3. 提升代码执行效率

  • 编译原理四——代码优化

    代码优化 代码优化的含义是:对代码进行等价变换,使得变换后的代码具有更高的时间效率和空间效率。代码优化的目的是提高...

  • 接口性能优化实战

    耗时接口的性能优化 异步并发执行,CompletableFuture,比如查询商品详情接口,需要查各种表,返回一个...

  • CompletableFuture及 在stream应用

    直接上代码 执行结果如下: CompletableFuture 1 )多步处理返回future 2 )处理后消费 ...

  • Jtro的技术分享:Unity中的一些优化建议

    在Unity中,相比漫无目的地调整代码,选择正确的脚本优化更能提高代码的执行效率。但值得注意的是,最好的优化并不是...

  • 提高代码执行效率的几个小技巧

    提高代码执行效率的几个小技巧 提高代码执行效率的几个小技巧

  • 高级应用篇六

    问题:算法的目的就是为了提高代码的执行效率。那当算法无法再继续优化的情况下,我们该如何来进一步提高执行效率呢?那就...

  • JVM中的锁优化

    锁优化 Jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 什么是锁升级,降...

  • 3,优化程序的性能

    前言 优化你的代码, 有时要在深度思考问题, 编译器的角度看待你的程序的效率 正文 一, 优化你的代码 jle 汇...

网友评论

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

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