JUC-02 ThreadPoolExecutor
下面的这3个问题你会吗?
构造函数
首先,我们来浅浅看一下。
这里有7个参数。他们的解释如下:
- corePoolSize: 要保留在池中的线程数,即使它们处于空闲状态,除非设置了 {@code allowCoreThreadTimeOut}
- maximumPoolSize: 池中允许的最大线程数
- keepAliveTime: 当线程数大于核心数时,多余的空闲线程等待新任务的最长时间,超过该时间则空闲线程终止。
- unit: {@code keepAliveTime} 方法参数对应的时间单位
- workQueue:存放等待执行的任务 的队列。此队列将仅包含 {@code execute} 方法提交的 {@code Runnable} 任务。
- threadFactory:executor中创建新线程时使用的线程工厂。
- handler:当线程达到上限并且队列满时,执行该策略处理新来的任务。
接下来,我这边绘制了一下线程池的流程图,我们就通过这个具体的流程图来学习一下这个参数的作用和影响。
这里需要注意下:是先让队列满了,再创建核心线程数外的线程。
这里需要思考一下为什么他要这么设计。个人认为主要是为了提高线程的复用,减小创建线程的开销,如果是先把线程创建满,那很有可能后续会有几个线程是空着的。而后创建线程,可以保证创建线程后,都是满负荷的去运行等待队列中的任务。
自定义线程工厂和拒绝策略
自定义线程
自定义拒绝策略
注意,拒绝策略会在 【等待队列满 并且 线程数也满】的情况下执行。
测试函数
运行结果
好的,看到这里对于ThreadPoolExecutor 的7个参数和自定义方法你了解了吗?
更多 视频 内容请
1. 抖 音 搜索关注 “程序员一棵树”
2. B站 搜索关注 “程序员一棵树”