说一下线程池的核心参数,线程池的执行原理知道嘛
发布于 2024-07-17
747
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
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葵花宝典
扫码关注公众号
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
springboot葵花宝典的其他文章
云计算-7-Dockerfile深度解析CMD和ENTRYPOINT指令
云计算-7-Dockerfile深度解析CMD和ENTRYPOINT命令
SpringBoot-3-精通Spring Boot请求响应:实战指南
当开发使用Spring Boot框架的应用程序时,请求和响应是其中一个重要的概念。请求是客户端向服务器发出的要求,而响应是服务器返回给客户端的结果。
探索强大的Elasticsearch(ES):现代搜索与分析引擎
大数据时代带来了海量的信息和数据如何高效地管理、搜索和分析这些数据成为了企业和组织面临的重要挑战。Elasticsearch应运而生,广泛用于各种领域,从企业搜索、日志分析到监控系统,为用户提供了快速、准确的数据搜索和分析功能。
SpringBoot-20-Mybatis代码生成
SpringBoot-18-Mybatis基础操作和代码生成
Docker从容器到永恒:使用数据卷实现MySQL8.1.0数据持久化
Docker从容器到永恒:使用数据卷实现
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线