线程池1st卷:何愁他日不雄飞

Java线程池的设计思路

第一部分:创业

面试题:讲一下线程池的内部原理

为了便于理解,我们可以结合现实中的场景去结合理解记忆。

  1. 你开了一家大型饭店,饭店需要厨师(线程)。你综合考虑所计划招募(corePoolSize)5个,你钱包决定最多能招募(maxiumPoolSize) 20个。
  2. 生意兴隆,吃饭的人络绎不绝,赶紧招募一个厨师, 名声在外吃饭的人更多啦,赶紧再招募一个厨师,…不知不觉,已经招募了corePoolSize个啦。
  3. 考虑到经济成本问题,暂且搞点茶水点心,让顾客排队等待(BlockingQueue) 吧。一不留神,这队伍已经太长啦(这可不行,影响交通,城管找茬)。
  4. 舍不得孩子套不着狼,赶紧打电话再从新东方烹饪学校(ThreadFactory) 继续招聘厨师…,吃饭的客人太多了,已经招募到maxiumPoolSize个啦。
  5. 天下的银子不可能都让我赚了, 再来客人,你陪着笑脸心里想着如何谢绝顾客(RejectExecutionHandler),后面会有一期专门讲。

讲到这里,大家都应该能记住其中的5个参数

  1. corePoolSize : 计划招募人数
  2. maxiumPoolSize :最大能招募人数
  3. BlockingQueue< Runnable > : 排队的队列
  4. ThreadFactory : 新东方烹饪学校
  5. RejectExecutionHandler : 拒绝顾客的策略

“原理”源于生活且不高于生活。

第二部分:如何处理临时工

龙在沙滩被虾戏,虎落平阳被犬欺

曾经有朋友抱怨遇到过“BT”(其实一点也不)面试官,会问: 线程池有哪几个参数。To be honest,老司机也会懵逼一下下,不是不知道Just突然说不出来。

科普一下,大家要注意数字7在西方是个非常神圣的数字

一周有几天,线程池就有几个参数。第一部分相当于工作了5天,周六日这2天大家更应该兴奋啊。

作为饭店老板的你很快意识到一个问题,生意有好有坏,养不起这么多(maxiumPoolSize)个厨师。怎么办呢?你下意识的想到了临时工— 机制


  1. KeepAliveTime : 等待keepAliveTime,若还没有顾客,就裁撤这些临时工;

PS : keepAliveTime 到底是按照什么时间单位来设置呢?你默默地点了一根烟,灵活处理吧。此时的你,已经不局限于做一个饭店老板啦。

  1. TimeUnit : 时间单位刻度。

第三部分:也许都是临时工

谁无虎落平阳日,待我风山再起时.

既然你已经认定自己要做大事,那就得思虑周详。你默默的看向了操作间。

老板活不下去地时候,“正式工”的概念也就没有意义啦。但是考虑到不能伤人心,所以摸摸的设置了一个变量allowCoreThreadTimeOut

allowCoreThreadTimeOut:当设置为true时,所有的“厨师”都是临时工。只要keepAliveTime一到,都卷铺盖走人。

结尾

此部分有几个问题需要处理:

  1. 作为饭店老板的你,拒绝策略,着实让人头疼。
  2. 不甘平凡的你如何做大事。

欲知后事如何,且听下回分解

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值