java ThreadPoolExecutor 对象创建参数理解

最近在学习 ThreadPoolExecutor ,发现网上的解释对于几个参数解释比较难懂,想到了一个比较形象的例子,会让各位记忆尤深。

 

 

 

 

结合上面两张图来理解我的举例。

 

拿去网红饭馆吃饭举例,一道菜特别有名,引来不少顾客

 

int corePoolSize

池中要保留的线程数,即使它们处于空闲状态,除非设置了 allowCoreThreadTimeOut

 

corePoolSize 对应饭馆的桌子,桌子是有限的。

 

int maximumPoolSize

池中允许的最大线程数

 

maximumPoolSize 对应整个饭馆,包括桌子外的其他空地,排队到门口了就"s"型排队,充分利用饭馆的空地。

和图中一样,maximumPoolSize 是整个线程池,范围包括 corePoolSize。

 

long keepAliveTime

当线程数大于 corePoolSize 时,多余空闲线程在终止前等待新任务的最长时间,

多余空闲线程即 maximumPoolSize - corePoolSize 的差,指空余线程存活的时间,和 unit 一起使用。

 

keepAliveTime 对应排队的人能接受的排队时长。

 

TimeUnit unit

keepAliveTime 参数的时间单位

 

BlockingQueue<Runnable> workQueue

在任务执行前用于保留任务的队列。

此队列将只保存由 execute() 提交的 Runnable 任务。

 

workQueue 对应在饭馆排队买饭到门口的人,从门口另外折回来排队的算 maximumPoolSize 的。

 

ThreadFactory threadFactory

执行器创建新线程时要使用的工厂

 

threadFactory 对应在门口拉客的人。

 

RejectedExecutionHandler handler

当执行因达到线程界限和队列容量而被阻止时要使用的处理程序

 

handler 对应打算吃饭的人从门口看排队形成的"s"型都已经好几个了,嫌排队时间过长想走的情况处理。

 

任务提交环节满的情况下的递进关系

corePoolSize workQueue maximumPoolSize

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值