一、线程池的执行流程
1. 首先,向线程池提交一个线程任务,线程池会分配空闲线程去处理该线程任务。
2. 如果没有空闲线程就判断当前存活线程数是否超过核心线程数:
(1)没有超过就创建一个核心线程,处理线程任务。
(2)超过核心线程数就将存活线程存放在工作队列中。
3. 如果工作队列满了,就要判断当前存活线程数是否超过最大线程数:
(1)没超过就创建非核心线程去处理线程任务,用完回收。
(2)超过最大线程数就直接执行拒绝策略。
二、线程池的核心参数
- 核心线程数 : corePoolSize
- 工作队列 : workQueue
- 最大线程数 : maxinumPoolSize
- 非核心线程线程空闲的存活时间及单位 : keepAliveTime 和 unit
- 线程工厂 : threadFactory
- 拒绝策略 : handler
三、线程池的拒绝策略
标签:策略,核心,流程,存活,任务,线程,执行,空闲 From: https://blog.csdn.net/weixin_65978343/article/details/142351802
- AbortPolicy : 丢弃任务,并抛出异常(RejectedExecutionException)
- DiscardPolicy: 只丢弃任务,不抛出异常
- DiscardOldestPolicy: 只丢弃最老(末尾)的任务,重新将当前任务提交给线程池处理
- CallerRunsPolicy: 直接运行run()方法
- 自定义决绝策略