线程池一大早就来到了公司,进到了属于自己的“经理”办公室,时间才刚刚8点,虽然他不用打卡。

不觉中时间来到了8:40,公司的“中层管理”人员们陆续到来,打卡后坐到各自工位,稍作调整,准备参加公司的“晨会”。

趁还有点时间,就给大家介绍下出席晨会的人员吧。线程池就是Java里的大名鼎鼎的ThreadPoolExecutor,是经理。

六个中层管理人员分别是:int corePoolSize、int maximumPoolSize、long keepAliveTime、BlockingQueue<Runnable> workQueue、ThreadFactory threadFactory、RejectedExecutionHandler handler。

他们都是线程池的好基友,毕竟大家合在一起才能使公司良好运行。

8:50已到,晨会准时开始,线程池说,公司又有了新的项目,需要一批开发人员,今天约了很多面试者,我也会参与和大家一起做好面试工作。

我们会安排4位核心面试官负责面试,如果实在忙不过来的话,可以陆续的再加入6位,也就是说今天最多会投入10位面试官。

晨会上每个中层管理分工明确,都领到了自己的工作,线程池则负责整体的协调工作。

晨会结束后,大家都进入了状态,随时准备迎接面试者的到来。说时迟那时快,这不,人来了。

int corePoolSize

线程池问corePoolSize,现在有几个面试官在面试?corePoolSize回答到,0个。

线程池接着对threadFactory说,去请1位面试官过来,threadFactory立马请来了1位,开始给这个面试者面试。

corePoolSize赶紧在纸上记下,现有核心面试官1人,最多能有4人,面试进行中的1人。

这时又来了2位面试者,线程池又问corePoolSize同样的问题,corePoolSize如实回答。

线程池又让threadFactory请来2位面试官,正好一人面试一个。

corePoolSize也随即记录下,现有核心面试官3人,最多能有4人,面试进行中的3人。

不一会第一个面试官结束了面试,送走了面试者。corePoolSize对面试官说,你别回去了,在这等会吧,反正待会还有人来。

corePoolSize也更新了自己的记录,现有核心面试官3人,最多能有4人,面试进行中的2人,空闲面试官1人。

不料此时又来了1位面试者,线程池看了看corePoolSize的记录,发现核心面试官虽然有1人空闲,但是还有1个名额可用。

心里想着就让空闲的面试官休息一下吧,于是又让threadFactory请来1位面试官进行面试。

corePoolSize随即又更新了自己的记录,现有核心面试官4人,最多能有4人,面试进行中的3人,空闲面试官1人。

过了一会又有一个面试官结束了面试。corePoolSize同样让他原地休息,不用回去了。等待接下来的人吧。

corePoolSize再次更新了自己的记录,现有核心面试官4人,最多能有4人,面试进行中的2人,空闲面试官2人。

BlockingQueue<Runnable> workQueue

空闲面试官还未休息片刻,此时又来了好几个面试者,线程池照例看了看corePoolSize的记录。心里琢磨起来。

4位核心面试官都已就位,名额用完了。现在只有2个空闲的,所以就只能安排2个人面试了。把剩下的面试者交给workQueue吧。

corePoolSize赶紧更新记录,现有核心面试官4人,最多能有4人,面试进行中的4人,空闲面试官0人。

然后只见workQueue在会议室外面摆上一排椅子,总共10个,请暂时没有面试的面试者依次坐在椅子上等候。

只要一有面试者结束面试,workQueue就让等候的第一个人进去。后面的每个人都往前坐一位。

workQueue把这个规则给坐着等候面试的人强调了几遍后,就自己找到地方偷懒去了,估计是看手机啥的。

此时又来了几个面试者,线程池还是先看corePoolSize的记录,看完后摇了摇头,直接把他们发给了workQueue。

workQueue还没有看几眼手机呢,就又被线程池给叫了去。最终workQueue领着刚来的面试者,让他们坐到椅子上跟着一起排队等候。

新的面试者陆续不断的到来,虽然4个核心面试官都在马不停蹄的忙着,可是明显速度不够快啊。

workQueue担心照这样下去,到时我这里连坐着排队的椅子都没有了。哎,真是怕什么来什么,这不,又来人了。

int maximumPoolSize

新来的几个面试者又被线程池发给了workQueue,待他们坐下来排队后,发现还有1位面试者没有椅子可坐了。workQueue赶紧把这个情况报告给线程池。

线程池找来maximumPoolSize说到,4位核心面试官都在忙碌,排队等候的地儿也满了,现在轮到你了。

maximumPoolSize说,我这里一共可以出6位扩展面试官,现在一位还没出过呢,所以没有问题。

于是线程池让threadFactory去请来1位面试官,来面试这个没有椅子坐的面试者。

maximumPoolSize也赶紧记录下信息,现有扩展面试官1人,最多能有6人,面试进行中1人。

在5位面试官的努力下,椅子终于出现了空闲,后续又来的几位面试者,依然坐在椅子上排队等候。

不一会椅子又坐满了,还多出来2个面试者没地儿坐,workQueue赶紧又报告给了线程池。

线程池看了maximumPoolSize的记录,又让threadFactory去请来2位面试官,面试这2位没地儿坐的人。

maximumPoolSize随即也更新了记录,现有扩展面试官3人,最多能有6人,面试进行中3人。

long keepAliveTime

随着面试的进行,排队等待面试的人越来越少。又过了一会,终于没有排队的了,都进入了面试中。

有一个扩展面试官结束面试了。maximumPoolSize上前说到,你先原地休息一下吧。然后找来了keepAliveTime。

让keepAliveTime记录下这个扩展面试官开始休息的时间,并说如果5分钟后还没有新的面试者到来,就先让他回去,需要时再去叫他。

keepAliveTime随即开始了计时。maximumPoolSize也更新了记录,现有扩展面试官3人,最多能有6人,面试进行中2人,空闲着的1人。

可能临近中午了,确实没有新的面试者到了,5分钟后,keepAliveTime让这个休息的扩展面试官回去自己的工位了。并告知了maximumPoolSize。

maximumPoolSize也立即再次更新记录,现有扩展面试官2人,最多能有6人,面试进行中2人,空闲着的0人。

另两位扩展面试官在面试结束后,都通过相同的流程并最终回到各自的工位了。

maximumPoolSize最后更新的记录,现有扩展面试官0人,最多能有6人。

不过4位核心面试官就没有这么幸运了,他们只能原地休息等待,不能回去。

corePoolSize最后更新了自己的记录,现有核心面试官4人,最多能有4人,面试进行中的0人,空闲面试官4人。

不知不觉中午已到来,面试者都已回去,经理和中层管理都去吃饭、休息了。

RejectedExecutionHandler handler

下午2:00上班,一下子来了一屋子的面试者,线程池马上发话,我们要开足马力,尽最大限度招待面试者。

corePoolSize负责的4个核心面试官全部都在面试中。workQueue负责的10个椅子也坐满了面试者在排队等候。

maximumPoolSize负责的6个扩展面试官也全部就位并都在面试中。整个公司再没有一块地儿可安排多余的面试者了。

于是线程池找来了handler,让他去接待多余的面试者,其实就是适当的记录每个面试者的信息,然后直接打发他们走。

有的面试者直接就走掉了,有的面试者留下了信息说以后再联系,不管如何吧,反正多余的面试者都被handler撵走了。

handler也挺无奈的,心里想着你们干嘛都一起来呀,分散着来不行啊,我实在不想拒绝你们,可没办法,哎。

线程池心里也委屈,我只是一个经理,又不是老板,老板就给我了这么点资源啊,我太难了,转过身留下了两滴眼泪。

END

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

线程池开门营业招聘开发人员的一天相关推荐

  1. 【海外AR社交APP招聘】外资企业,可在家办公,招聘开发人员啦

    现有职位AR Project Technical Lead,Unity 3D Developer,.Net Developer,初中高级均有岗位.JD详见下文 APP下载体验:MMITA - Meet ...

  2. 线程池在美团的最佳实践

    随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员 ...

  3. Java线程池实现原理及其在美团业务中的实践

    来自:美团技术团队 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池ThreadPoolExecuto ...

  4. executor线程池框架_如何使用Java 5 Executor框架创建线程池

    executor线程池框架 Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离. 如果要使用Java进行服务器端编程,则线程池是维护系统可伸 ...

  5. 如何使用Java 5 Executor框架创建线程池

    Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离. 如果要使用Java进行服务器端编程,则线程池是维护系统可伸缩性,鲁棒性和稳定性的重要概 ...

  6. 线程池参数如何设置?

    前言 着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发 ...

  7. 【有料】Java线程池实现原理及其在美团业务中的实践

    随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流.使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器.J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员 ...

  8. Java线程池实现原理及其在美团业务中的实践(转载加总结)

    我们知道线程有5种状态分别是新建,就绪,运行,阻塞,死亡,而对应的线程池也有5种状态RUNNING运行,线程池创建就是该状态,SHUTDOWN 不接受新任务,但是处理已存在的任务,STOP不接受新任务 ...

  9. ThreadPoolExecutor线程池原理

    ThreadPoolExecutor线程池原理 线程池原理 1. 线程池的简单介绍 1.1 线程池是什么 1.2 线程池解决的核心问题是什么 2. 线程池的实现原理 2.1 线程池的执行流程 2.2 ...

最新文章

  1. CCNP路由实验---3、人工汇总EIGRP路由
  2. 支持字母数字下划线和中文的正则
  3. 【NLP】基于深度学习的文本分类应用
  4. 一招教你舍友学会尤克里里 | 今日最佳
  5. Python之路,day4-Python基础
  6. jQuery clearQueue
  7. Android中使用ShareSDK功能学习
  8. 5种常见的网络欺骗方式
  9. FreeImage的配置与使用
  10. 360网站域名拦截检测 非法网址检测系统原理
  11. 企业微信第三方应用开发
  12. 刷题记录:牛客NC23803DongDong认亲戚
  13. vue使用v-print-nb插件实现A4纸张排版打印
  14. 【正点原子Linux连载】第六十七章 Linux USB驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
  15. Windows下nginx启动报错黑屏(1113: No mapping for the Unicode character exists in the target......
  16. 专升本 计算机 公共课学习笔记(持续更新中...)
  17. (2020版) 墙裂推荐这十款精选 IntelliJ Idea 插件
  18. 【uniapp 动态设置 起始页 默认展示页面 】
  19. 企业微信如何提高用户粘性防止粉丝流失
  20. 1+x web前端开发初级选择题整理(html+css+jquery)

热门文章

  1. python第八周小测试_Python小测试.doc
  2. android 兼容性定义,谷歌释出 Android 7.0 兼容性定义文件,史上最严
  3. 【C语言笔记初级篇】第七章:结构体相关
  4. (计算机组成原理)第三章存储系统-第三节2:ROM芯片
  5. stdint.h 文件
  6. linux 下脚本查看带宽 (不需要安装其他工具包)
  7. LeetCode 452 用最少数量的箭引爆气球
  8. poj3190 区间贪心 挑战程序设计竞赛
  9. 16. OD-破解序列号验证机算法
  10. jQuery选择器总结[转]