最近在做商城项目,项目中有一个展示商品详情的功能,逻辑上很简单
给大家看一下代码
这是最开始的写法,但是后来仔细一看这样是有问题的,这段代码里总共是有5个查询操作,并且还是同步操作,这样的话如果其中一个耗时太久,其他的就得等待,代码性能很差,这个时候我们就想到了一个优化的方法异步编程(CompletableFuture)
下面展示一下具体步骤
第一步 我们得有一个自己的线程池
(为什么要用线程池以及线程池的好处我就不赘述了,不懂的可以百度异步编程,或者等我之后发布一篇专门讲述异步编程的博客)
@Configuration
public class MyThreadConfig {
@Bean
public ThreadPoolExecutor threadPoolExecutor(ThreadPoolConfigProperties pool){
return new ThreadPoolExecutor(pool.getCoreSize(), //核心线程数
pool.getMaxSize(), //最大线程数
pool.getKeepAliveTime(), TimeUnit.SECONDS, //线程空闲多长时间关闭
new LinkedBlockingDeque<>(100000), //阻塞队列 长度1OW
Executors.defaultThreadFactory(), //线程工厂
new ThreadPoolExecutor.AbortPolicy() //拒绝策略
);
}
}
@ConfigurationProperties(prefix="gulimall.thread")
@Component
@Data
public class ThreadPoolConfigProperties {
private Integer coreSize;
private Integer maxSize;
private Integer keepAliveTime;
}
gulimall.thread.core-size=20
gulimall.thread.max-size=200
gulimall.thread.keep-alive-time=10
这样搞是方便我们后期nacos动态配置
第二步 修改业务代码
注入线程池