Java 并发之线程池的使用(ThreadPoolExecutor)

前言

"池化"是软件开发中的一种思想,比如常见的数据库连接池;在高并发场景下合理使用线程池能显著提高 CPU 运行效率,从而提升软件使用体验。

一、Java 中的线程池

JDK 1.5 版本起,在 java.util.concurrent 包下 Executors 类提供了创建线程池的方法
Executors类
通过查看源码可以看到,内部均由 ThreadPoolExecutor 类进行实现
ThreadPoolExecutor
ThreadPoolExecutor规范
既然如此,我们就重点分析下 ThreadPoolExecutor 类的相关参数

参数说明
corePoolSize核心线程数
maximumPoolSize最大线程数
keepAliveTime存活时间
TimeUnit时间单位
BlockingQueue阻塞队列
ThreadFactory线程工厂
RejectedExecutionHandler拒绝策略

阻塞队列

阻塞队列

拒绝策略

拒绝策略

二、使用场景

场景一

快速响应用户请求:比如一个查询接口需要多次数据库查询操作,中间可能还存在系统间的网络请求服务,针对这种情况应使用不存储元素的阻塞队列,通过增加线程数,快速处理任务。

场景二

快速处理批量任务:比如后台系统中常见的 Excel 解析存储,批量数据入库等耗时操作,不追求快速响应结果的场景,

参考资料

Java线程池实现原理及其在美团业务中的实践


版权声明:本文为weixin_38882387原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。