使用多线程并行处理任务,提高效率

案例详解

电商app中,商品详情页,开发一个接口提供以下信息

  1. 商品基本信息(名称、价格、库存等)
  2. 商品图片列表
  3. 商品描述信息

数据库中我们用了3张表存储上面的信息

  1. 商品基本信息表:t_goods(字段:id、名称、价格、库存等)
  2. 商品图片信息表:t_goods_imgs(字段:id、goods_id、图片路径等)
  3. 商品描述信息表:t_goods_ext(字段:id、goods_id、描述信息等)

常规写法,伪代码如下:

public Map<String,Object> detail(long goodsId) {
   
   //创建一个map
   Map<String,Object> map = new HashMap<>();
   //step1:查询商品基本信息,放入map
   map.put("goodsModel",(select * from t_goods where id = #goodsId#));
   //step2:查询商品图片列表,返回一个集合放入map
   map.put("goodsImgsModelList",(select * from t_goods_imgs where goods_id = #goodsId#));
   //step3:查询商品描述信息,放入map
   map.put("goodsExtModel",(select * from t_goods_ext where goods_id = #goodsId#));
   return map;
}

这种写法很简单,假设上面每个步骤耗时500ms,此接口总耗时 >=1500ms,其它涉及到网络传输耗时,估计总共在1600ms左右

我们看一下上面的逻辑,整个过程是按照顺序执行的,实际上3个查询之间是没有任何依赖关系的,所以说,3个查询可以同时执行

使用多线程对代码进行重构:

package thread.demo;

import
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值