线程池笔记

线程池任务调度机制 -- 打电话预定酒店房间的例子


小明最近打算出去玩,需要预定酒店。小明心想多久都没出来玩了,这次奢侈一把,定个好点的房间吧。于是,拿起电话打给酒店前台客服,

小明:你好,请问是XX酒店吗?我想定一个总统套房。

前台:您好,好的,我先帮您看下还有没有总统套房,请您先稍等一下。

小明:好的。

前台:您好,很抱歉,由于最近是假期,今天的总统套房都已经被定满了,明天可能会有空房哦。您那边是打算什么时候入住呢?

小明:刚好是明天要入住,但是呢,因为最近人很多,都在定酒店。所以前台小姐姐帮我看下明天预约总统套房的人数是多少,预约人数有没有满。

前台:好的,这边帮您查看一下预约人数刚好是总统套房的间数,也就是20个。虽说现在预约数已经满了,但是会有人中途撤销预约的哦,您那边要不要再考虑一下?

小明:感觉有点子冒险,我还是再想想吧,那其他套房还有剩余的吗?

前台:有的,有的,先生,这边有三个普通大套房,也是很不错的,设备都很齐全,我可以给您安排一间环境最好的。

小明:那好吧,也只能先这样了,那你帮我订一间环境好点的大套房吧。

前台:嗯嗯,好的。这边请您留一下您的手机号码,我这边马上给您预定登记。

小明:电话号码是XXXXXX。

上面的例子中,线程池最大的线程数量就是这个酒店的全部房间数。总统套房,就好比是核心线程数
(核心,最重要的也是最尊贵的不就是总统套房嘛,哈哈哈)。总统套房的预约人数,就好比是任务队列。

如果有总统套房或者大套房, 则直接拎包入住,也就是直接创建新线程执行任务。如果考虑继续预约总统套房,类似进入任务队列进行等待。

如果房间全部爆满或者预约爆满,前台为了保证收益让小明考虑一下。小明肯定直接不考虑,直接走拒绝策略,说不好意思,不考虑贵店了,结束流程。

如果酒店不再营业了的情况也是和上面一样。

具体看下面的图:

线程池状态 举一个游乐场排队的例子

游乐场的人往往都会有很多,一群人在那排队等一个游玩项目

正常的情况,机器运行正常,游乐场的营业正常,属于运行Running状态


检票员每次检票放人进去的时候,达到一定人数后会关闭通道路口,不允许人进去,可以看成是一个shutdown的状态(关闭通道的操作)


如果在玩的时候发现了机器出现故障,就会紧急停止项目。可以看成是一个stop的状态


将进入的游客或正在玩的游客依次安排出去,如果有游客卡在机器上,就叫救护车来帮忙解救,这个过程其实就是 tidying ,表示正在整理(解救)的动作


当机器最终停止,人群疏散开并且解救完人之后。游乐场立马进行维修,那么最终会先停业,避免再次出事故,对应着线程中的 TERMINATED 状态

Running 可以直接到 stop ,比如说,游乐场刚开业,就被举报说设备安全系数不够,市场局的人来查封,

接着开始进入调查和营业整顿(tidying)的环节,最终只能停业 TERMINATED

可以看下面的图:

ThreadPoolExecutor线程池有如下几种状态:

  1. RUNNING:运行状态,接受新任务,持续处理任务队列里的任务;
  2. SHUTDOWN:不再接受新任务,但要处理任务队列里的任务;
  3. STOP:不再接受新任务,不再处理任务队列里的任务,中断正在进行中的任务;
  4. TIDYING:表示线程池正在停止运作,中止所有任务,销毁所有工作线程,当线程池执行terminated()方法时进入TIDYING状态;
  5. TERMINATED:表示线程池已停止运作,所有工作线程已被销毁,所有任务已被清空或执行完毕,terminated()方法执行完成;



原文转载链接:https://www.zhihu.com/question/336683528/answer/2518487120

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值