说一下线程池的核心参数,线程池的执行原理知道嘛
发布于 2024-07-17
659
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
springboot葵花宝典
扫码关注公众号
扫码阅读
手机扫码阅读
线程池核心参数及执行原理
1. 线程池的核心参数
线程池的七大核心参数如下:
- corePoolSize: 核心线程数目。
- maximumPoolSize: 最大线程数目,包括核心线程与救急线程。
- keepAliveTime: 救急线程的生存时间,超时后释放资源。
- unit: 时间单位,如秒、毫秒等。
- workQueue: 阻塞队列,存储待执行任务。
- threadFactory: 线程工厂,用于定制线程对象。
- handler: 拒绝策略,当线程池满时决定如何处理任务。
2. 线程池的执行原理
线程池的执行机制包括以下步骤:
- 任务提交时,优先分配核心线程执行任务。
- 如果核心线程已满,则任务存入阻塞队列。
- 当阻塞队列满时,判断是否可以创建救急线程执行任务。
- 如果所有线程都忙,则触发拒绝策略。
拒绝策略
- AbortPolicy: 默认策略,抛出异常。
- CallerRunsPolicy: 使用提交任务的线程执行任务。
- DiscardOldestPolicy: 丢弃队列中最前的任务并执行当前任务。
- DiscardPolicy: 直接丢弃任务。
3. 常见阻塞队列
阻塞队列用于存储待执行任务,常见类型包括:
- ArrayBlockingQueue: 基于数组结构的有界队列。
- LinkedBlockingQueue: 基于链表结构的有界队列。
- DelayedWorkQueue: 优先级队列,出队任务时间最靠前。
- SynchronousQueue: 不存储元素,每次插入操作需等待移除操作。
ArrayBlockingQueue与LinkedBlockingQueue区别
| LinkedBlockingQueue | ArrayBlockingQueue |
|---|---|
| 默认无界,支持有界 | 强制有界 |
| 底层是链表 | 底层是数组 |
| 读写各有一把锁,性能较好 | 读写公用一把锁,性能相对较差 |
4. 线程池的种类
Java提供了四种常见线程池的创建方式:
- FixedThreadPool: 固定线程数的线程池,适用于任务量已知且耗时任务。
springboot葵花宝典
springboot葵花宝典
扫码关注公众号
了解过Mysql索引吗?(什么是索引)
上一篇
没有了
下一篇
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
springboot葵花宝典的其他文章
SpringBoot-10-深入探索Spring Boot Admin
SpringBoot高级篇-监控
今日目标
掌握SpringBoot监控
在?
SpringSecurity-10-Session会话管理
SpringSecurity-10-Session会话管理理解
SpringBoot-21-Mybatis多数据源配置
SpringBoot-21-Mybatis多数据源配置
SpringBoot-20-Mybatis代码生成
SpringBoot-18-Mybatis基础操作和代码生成
SpringBoot-6-MyBatis-Plus:告别繁琐,轻松上手快速入门和高级查询
MyBatis-Plus+Lambda:告别繁琐,轻松上手快速入门和高级查询
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线