细说线程池–中级篇

  • 2019 年 12 月 25 日
  • 笔记

线程池的实现原理分析

线程池的基本使用我们都清楚了,接下来我们来了解一下线程池的实现原理ThreadPoolExecutor是线程池的核心,提供了线程池的实现。ScheduledThreadPoolExecutor继承了 ThreadPoolExecutor,并另外提供一些调度方法以支持定时和周期任务。

Executers 是工具类,主要用来创建线程池对象我们把一个任务提交给线程池去处理的时候,线程池的处理过程是什么样的呢?首先直接来看看定义

线程池流程图

关注点在于execute方法,然后我们可以使用一个流程图来描述,整个线程池的整体状况:

线程池原理分析( newFixedThreadPool)

线程池就在生活中

小工厂生产汽车零件

工厂–线程池

正式员工—核心线程数

临时员工—-最大线程数-核心线程数

工位或者场地—硬件资源

工厂生产汽车的零件,正常情况下,正式员工是能完成零件的生产,但是由于生意火爆,需要生产更多的零件,这是工厂就把接到的单存放起来,让正式员工加班加点的干,但是发现存放的单实在是太多了,这时候就得请临时工入场帮忙生产零件,解决那么存放的零件单。临时工人数也不能太多了,因为工厂场地有限(工位有限)。如果正式员工和临时工一起加班加点的生产,还是跟不上接到的零件单,对不起,我工厂真的无能为力,这时候工厂就得采取拒绝策略。

人力外包

当今社会上,很多人力外包的,比如说:人工客服。虽然现在也流行起人工智能客服,但是人力外包依然存在。

A公司请了10个客服,专门用来解决用户遇到的问题和投诉的。正常情况下,10个客服能应对所有客户的问题和投诉,但是一旦某个产品出问题较多,这时候10个客服就明显忙不过来了,但是还是能应付的,只是很多时候不能及时回复客户。祸不单行,这段时间用户使用的系统老是挂掉,产品不行+系统不稳定。导致客户收到反馈明显延迟的太久,这时候,A公司领导觉得请临时工来帮忙解决问题,因为A公司只能容纳下15个客服,但是15个完全是不能解决问题的,这时候就得采取拒绝了,反馈说我这边已经处理不了太多问题了。