扫码阅读
手机扫码阅读
说一下线程池的核心参数,线程池的执行原理知道嘛
136 2024-07-17
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章来源:
springboot葵花宝典
扫码关注公众号
线程池的核心参数
线程池的七大核心参数包括:
- corePoolSize: 核心线程数目。
- maximumPoolSize: 最大线程数目,包括核心线程和救急线程。
- keepAliveTime: 救急线程的最大存活时间,无任务则线程被回收。
- unit: 时间单位,例如秒或毫秒。
- workQueue: 当核心线程忙时,新任务进入队列等待。
- threadFactory: 线程工厂,自定义线程创建细节。
- handler: 拒绝策略,当线程繁忙且队列满时的处理策略。
线程池的执行原理
线程池在执行任务时:
- 先检查核心线程是否已满,未满则直接执行。
- 核心线程满,则检查阻塞队列是否已满,未满则加入队列。
- 阻塞队列满,检查线程数是否小于最大线程数,是则创建临时线程执行。
- 所有线程忙碌时,执行拒绝策略。
线程池的拒绝策略
拒绝策略包括:
- AbortPolicy: 默认策略,抛出异常。
- CallerRunsPolicy: 调用者线程自己执行任务。
- DiscardOldestPolicy: 丢弃队列最前的任务,执行新任务。
- DiscardPolicy: 直接丢弃任务。
常见阻塞队列
常用阻塞队列如下:
- ArrayBlockingQueue: 基于数组的有界队列。
- LinkedBlockingQueue: 基于链表的有界/无界队列。
- DelayedWorkQueue: 优先级队列,按执行时间排序。
- SynchronousQueue: 不存储元素的队列,插入操作需等待移除操作。
ArrayBlockingQueue与LinkedBlockingQueue的区别
特点 | LinkedBlockingQueue | ArrayBlockingQueue |
---|---|---|
边界 | 默认无界,支持有界 | 强制有界 |
底层结构 | 链表 | 数组 |
初始化 | 懒惰,创建时添加数据 | 提前初始化 |
加锁方式 | 两把锁(读写分离) | 单锁(读写共用) |
线程池的种类
java.util.concurrent.Executors类提供四种常见线程池:
- 固定线程数的线程池,使用LinkedBlockingQueue
- ...
适合于已知任务量且任务耗时的场景。
摘要: 本文介绍了线程池的核心参数、执行原理、拒绝策略以及常见阻塞队列。线程池的核心参数包括核心线程数、最大线程数、救急线程存活时间、时间单位、工作队列、线程工厂和拒绝策略。执行原理涉及核心线程和工作队列的检查以及救急线程的创建。拒绝策略有四种,包括抛出异常、调用者执行任务、丢弃最旧任务和直接丢弃任务。常用的阻塞队列有ArrayBlockingQueue和LinkedBlockingQueue等。ArrayBlockingQueue是有界队列,基于数组,初始化时创建所有节点,使用单一锁。LinkedBlockingQueue可无界也可有界,基于链表,新增数据时创建节点,使用两把锁。最后,介绍了java.util.concurrent.Executors类提供的四种线程池,其中固定线程数的线程池使用LinkedBlockingQueue,适用于任务量已知且耗时的任务。想要了解更多内容?
文章来源:
springboot葵花宝典
扫码关注公众号
了解过Mysql索引吗?(什么是索引)
上一篇
没有了
下一篇
springboot葵花宝典的其他文章
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线