Skip to main content

02小节:并发查询用户可用/不可用优惠券

作者:程序员马丁

在线博客:https://nageoffer.com

note

热门项目实战社群,收获国内众多知名公司面试青睐,近千名同学面试成功!助力你在校招或社招上拿个offer。

并发查询用户可用/不可用优惠券&计算折扣金额,元数据信息:

©版权所有 - 拿个offer-开源&项目实战星球专属学习项目,依据《中华人民共和国著作权法实施条例》《知识星球产权保护》,严禁未经本项目原作者明确书面授权擅自分享至 GitHub、Gitee 等任何开放平台。违者将面临法律追究。


内容摘要:在上一章节,实现在订单结算时根据优惠券的不同类型(立减券、满减券、折扣券)进行分类和优惠金额计算。在本章节中,我们通过多线程并行优化技术,将原先串行处理的优惠券计算逻辑改造为基于 CompletableFuture 的多线程并行处理方案。这种方式能够在处理大量优惠券时有效降低计算延时,提高系统响应速度。尤其是在每个优惠券的计算逻辑相对复杂时,多线程并行能够显著提升处理效率。

课程目录如下所示:

  • 业务背景
  • Git 分支
  • 多线程计算优惠金额
  • 功能测试
  • 文末总结

业务背景

在日常开发中,大家通常想到的性能优化方式就是引入多线程进行并行处理。在之前的计算逻辑中,我们是以单线程的串行方式逐个处理优惠券的计算。那是否可以尝试将每个优惠券的计算逻辑从串行改为多线程并行处理呢?

理论上,如果计算一个优惠券的优惠金额需要 1 毫秒,那么处理 10 个优惠券时串行执行就需要 10 毫秒,但如果采用并行执行方式,10 个任务同时计算就只需要 1 毫秒。带着这个优化思路,我们继续深入分析和改进。

Git 分支

先从 main 分支上查看,代码入口:CouponQueryController#listQueryCoupons

和上一章节《查询用户可用/不可用优惠券&计算折扣金额》业务完全一致,如果对下面业务代码不太了解的话,可以先去看下。

多线程计算优惠金额

1. 并行技术选型

多线程并行优化有多种实现方式,例如通过线程池结合 Future 或使用 CompletableFuture 等。在本场景中,我们选择使用 CompletableFuture 来实现多线程并行处理。如果大家想深入了解 CompletableFuture 的机制和使用场景,推荐阅读以下两篇文章:

通过阅读这两篇文章,可以更好地理解 CompletableFuture 的作用及其在提升系统性能中的实际应用。

2. 并行代码改造

在使用线程池结合 CompletableFuture 进行并行改造时,涉及到多个并发编程的细节和优化点。比如,如何合理设置线程池参数、处理多线程环境下集合的并发安全问题、以及如何在所有并发任务完成后再进行后续处理等。

解锁付费内容,👉 戳