JUC之线程池七大参数理解

前言

研究线程池时,存在7大参数。每个参数都有其特定的含义,上一篇博客(JUC之线程池)中针对线程池创建使用拒绝策略等做了详细的说明。

思来想去,针对自定义线程池操作中的7大参数极易混淆,本篇博客采取图谱的形式进行参数解释。

7大参数

参考java.util.concurrent.ThreadPoolExecutor#ThreadPoolExecutor()构造方法结果而言。

源码如下:

public ThreadPoolExecutor(int corePoolSize,//核心线程数
                              int maximumPoolSize,//最大线程数
                              long keepAliveTime,//存活时间(限定时间内无调用则释放)
                              TimeUnit unit,// 存活的时间单位
                              BlockingQueue<Runnable> workQueue,//阻塞队列
                              ThreadFactory threadFactory,//线程工厂,创建线程
                              RejectedExecutionHandler handler //拒绝策略
                          ) 

各项参数理解

假设某人,这里起名小A去银行办理业务,此时银行中的柜台如下所示:
在这里插入图片描述
小A来到前台1,进行业务办理。
此时小B也来到银行,前往前台2,进行业务办理。

在这里插入图片描述

前台1前台2此时则为核心处理数 corePoolSize
前台 3前台4前台5则为 最大处理数 maximumPoolSize

此时小A小B在办理业务的同时,此时又来了几个需要办理业务的,此时刚来的几个则会前往等待厅进行等待。

在这里插入图片描述

此时的等候厅就是队列,其中能坐多少人,则表示队列容量

[注意:]可能有人会问,什么时候会开启前台3~5?

前台1~2占用,且队列满时,会开启前台3~5

假设这天办理业务的人数特别多,银行当前有效的前台并不能及时的处理业务需求,此时银行则会开放剩下的3个窗口。
在这里插入图片描述
此时还有人陆续在来银行,发现此时银行人数过多,此时保安就需要管理人数。
在这里插入图片描述

此时的保安,则表示拒绝策略

假设此时快到吃饭点了,银行需要办理业务的人少了很多,此时前台1前台2也刚好可以处理的过来。

但是此时为了防止突然会有大量人办理业务,不能立刻关闭前台3~前台5

需要等待一段时间,持续无人时,再来关闭。
在这里插入图片描述

等待时间就可以理解为存活时间 keepAliveTime,以及等待是小时还是分钟,则为unit

猜你喜欢

转载自blog.csdn.net/qq_38322527/article/details/115086736