大家都知道 线程池一般的使用场景 一般都是常用的几种
1.后台系统的数据的批量导入
特别是数据量大的情况下,可以使用线程池,多线程的数据处理
2.大文件下载
可以使用线程池实现多线程下载
3.详情动态页面静态化
详情页的静态页面的生成,可以使用线程池
4.优惠券的系统发放
可能存在海量用户,使用线程池完成多线程的发放
分片算法,计算任务 每个任务处理1000个数据
通过翻阅资料可知 线程池最大的作用 如下
1,降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗
2,提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行
3,提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控
因此我们才会在项目中使用到 线程池技术 在实际的项目中如何去使用呢
1.进行数据库查询时且数据量大又耗时 考虑到用分页 查询数据 比如数据有10000条的时候 利用了 线程池 技术
1.引入jar包
2.创建连接池配置类
里面的参数可以根据实际情况进行自行设定
@Configuration
@EnableAsync
public class AsyncConfiguration {
@Bean
public ThreadPoolTaskExecutor executor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(50);
//配置最大线程数
executor.setMaxPoolSize(100);
//配置队列大小
executor.setQueueCapacity(1000);
//线程的名称前缀
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("xxxx");
//等待所有任务结束后再关闭线程池
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//执行初始化
executor.initialize();
return executor;
}
3.启动类上添加@EnableAsync
ThreadPoolTaskExecutor和ThreadPoolExecutor的区别
ThreadPoolTaskExecutor是spring core包中提供的,而ThreadPoolExecutor是JDK中的JUC包下提供的,并且ThreadPoolTaskExecutor是在ThreadPoolExecutor的基础上进一步进行了封装处理,因此我们项目中直接使用ThreadPoolTaskExecutor即可。
具体介绍 请看原文链接:https://blog.csdn.net/lingerlan510/article/details/122322588