理解: 正式工已经招满, 此时所有的正式工都在忙着工作, 且队列中的新任务已达到队列上线, 需要招聘临时工, 来完成任务. 正式工和临时工的总数为公司的最大员工数, 如果所有的临时工也都有任务, 再来新任务公司予以拒绝
4. keepAliveTime 线程最大空闲时间
线程池中没有被使用的线程, 就会处于空闲(alive)状态, 只要超过keepAliveTime, 空闲的线程就会被销毁,直到线程池中的线程数等于corePoolSize
如果设置了allowCoreThreadTimeOut=true(默认false),核心线程也可以被销毁
理解: 到了淡季, 公司不忙了, 很多的正式工和临时工都空闲了, 临时工就直接解雇了, 而正式工没有重大违纪的不会解雇
5. unit keepAliveTime 时间单位
TimeUnit是枚举类型
包含如下时间单位
注:
1秒 = 1000毫秒 1毫秒 = 1000微秒 1微妙 = 1000纳秒
6. threadFactory 线程工厂
主要用来创建线程
7. handler 线程池拒绝策略(面试题:线程池拒绝策略有哪些)
只有核心线程都在使用中,任务队列已满,且线程数量已经达到maximunPoolSize才会触发拒绝策略。或在调用shutdown()和真正关闭线程池之间提交的任务都会被决绝。因为线程池被shutdown()时,会等待线程池内线程对象执行结束,才关闭线程池
DiscardoldestPolicy: 从队列中去掉一个最先进入队列的任务。然后重新提交被拒绝的任务(重复此过程)
AbortPolicy:丢弃任务,抛出运行时异常(RejectedExecutionException)(默认值)
CallerRunsPolicy:由调用该任务的线程处理, 线程池不参与
DiscardPolicy:丢弃任务,不抛出异常
| | |
| — | — |
| | |
================================================================================
corePoolSize: 核心线程数大小
maximunPoolSize:最大线程数大小(包含核心线程数,剩下的就是普通线程数)
queueCapacity:任务队列最大长度
keepAliveSize:线程最大空闲时间
allowCoreThreadTimeOut:核心线程超时是否被销毁(默认 false)
handler:拒绝策略
workQueue:任务队列类型
1.当线程数小于核心线程数时,创建线程, 直到到达核心指定的核心线程数
2.当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列
3.当线程数大于等于核心线程数,且任务队列已满
若线程数小于最大线程数,创建线程, 直到达到最大线程数
若线程数等于最大线程数,抛出异常,拒绝任务
========================================================================
Executors可以帮助快速实例化特定类型的线程池对象, Executors属于一个工具类
返回值都是ExecutorService接口的实现类, 底层都是调用ThreadPoolExecutor()
不需要要参数,基本上都是默认值
构造方法参数:
corePoolSize: 0
maximumPoolSize: Integer的最大值
keepAliveTime: 60秒
workQueue&