概述
最近在学习 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
最后
以上就是腼腆大地为你收集整理的java ThreadPoolExecutor 对象创建参数理解的全部内容,希望文章能够帮你解决java ThreadPoolExecutor 对象创建参数理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复