简单纪要:线程池的使用
ThreadPoolExecutor类
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}
corePoolSize:核心线程数:核心线程会一直存活,即使不存在任务,并核心线程数不能为0,非则抛出异常(IllegalArgumentException);
maximumPoolSize:线程最大数:线程池所能创造最大个数,
a, 当前线程数 >= 核心核心线程数 创造新线程继续执行;
b, 当前线程数 = 线程最大数 抛出异常,拒绝处理任务;
keepAliveTime:线程空闲时间 当线程空闲时间达到 keepAliveTime时间时,当前线程会被杀死,直到达到核心线程数;
workQueue:线程池所使用的缓冲队列;
ThreadFactory:线程工厂,用于创建线程;
RejectedExecctionHandle:拒绝策略;
当核心线程数满了,阻塞队列也满了,此时maximumPoolSize 扩容,如果maximumPoolSize 也满了,就会启动阻塞机制;
生产中常用的线程池配置
配置分为两类:
cpu密集型:本地CPU核数 + 1
io 密集型:本地CPU核数 * 2
手动配置:
本地cpu核数 / 1 - 阻塞系数 (阻塞系数在 0.8 - 0.9 之间)
常见四种线程池
1) fixthreadPool: 固定数目线程池,正规的开发线程,多用于服务器,核心线程是没有超时机制的,队列没有大小,除非线程关闭了,核心线程才会被回收;
2)cacheThreadPool:只有非核心线程,最大线程数很大,他会为每一个任务添加一个线程,但是有超时时间,如果线程空闲时间 > 60s,会被回收;
3)singleThreadPool: 只有一个核心线程的线程池;
4)scheduledThreadPool:是一个有延期执行和周期重复执行的线程池,他的线程池固定,但其他线程随机创建,只要空闲,立即回收;
但是生产当中,以上四种线程池 很少使用甚至都不使用; 使用的是本文开篇所展示的代码形式;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律