CompletableFuture 并发执行并封装全部线程结果返回

该博客介绍了如何利用CompletableFuture进行并发任务执行,特别是在预估不同快递公司的费用场景中。通过CompletableFuture.runAsync()结合深拷贝解决参数共享问题,确保每个快递费用预估的准确性。在4核8G的服务器上,预估8个快递公司的费用能在500毫秒内完成,提高了系统的响应速度。

异步回调

异步回调、CompletableFuture、Future 与 CompletableFuture

概念

CompletableFuture 是 Callable 与 Future 的升级类

应用场景
  1. 并发执行任务,并需要对并发执行的全部线程进行封装,返回时
实际运用

寄快递的时候,需要同时预估不同快递的快递费用,并最后同时展示在页面上,提供给用户选择一个最便宜或者最合适的快递公司进行寄件。

解决方案

初步分析需求,只需要用 CompletableFuture.runAsync() 方法去预估,但是碰到的 问题 是,每次进行预估的时候,请求类的参数 快递类型 总是被其他的请求更改掉了。导致要么全部是申通的预估价格,要么是圆通的渠道价格。
最后解决: 采用 CompletableFuture.runAsync() 搭配 SerializationUtils.clone() 深拷贝 进行预估。成功解决问题。并且在线上的 4 核 8G 的配置下,预估 **8个 **快递公司的快递金额,可以达到 **500 毫秒 **内的请求响应速度。本地才 3


/**
* 并发执行预估各个快递的价格
*
* @param jdBill 请求类
* @param user   当前用户
* @return 快递预估信息集合
*/
public List<PreOrderResult> getFastPreOrderFee(JdBill jdBill, SysUser user) {
   
   
    // 初始化返回结果集合
    List<PreOrderResult> objects = new ArrayList();
    // 初始化线程数量
    CompletableFuture[
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员西柚柚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值