前言
"池化"是软件开发中的一种思想,比如常见的数据库连接池;在高并发场景下合理使用线程池能显著提高 CPU 运行效率,从而提升软件使用体验。
一、Java 中的线程池
JDK 1.5 版本起,在 java.util.concurrent
包下 Executors
类提供了创建线程池的方法
通过查看源码可以看到,内部均由 ThreadPoolExecutor
类进行实现
既然如此,我们就重点分析下 ThreadPoolExecutor
类的相关参数
参数 | 说明 |
---|---|
corePoolSize | 核心线程数 |
maximumPoolSize | 最大线程数 |
keepAliveTime | 存活时间 |
TimeUnit | 时间单位 |
BlockingQueue | 阻塞队列 |
ThreadFactory | 线程工厂 |
RejectedExecutionHandler | 拒绝策略 |
阻塞队列
拒绝策略
二、使用场景
场景一
快速响应用户请求:比如一个查询接口需要多次数据库查询操作,中间可能还存在系统间的网络请求服务,针对这种情况应使用不存储元素的阻塞队列,通过增加线程数,快速处理任务。
场景二
快速处理批量任务:比如后台系统中常见的 Excel 解析存储,批量数据入库等耗时操作,不追求快速响应结果的场景,