面试官:简述实现一个线程池的设计思路

前言

二面碰到这个问题人都麻了,我扯了好多没用的,面后赶紧来补一下,但是找到的基本都是一堆纯代码,不是讲思路的。下面的思路是我参考美团技术团队文章后总结的。

具体思路

一、总体设计

线程池在内部实际上构建了一个生产者–消费者模型,将线程和任务解耦,不直接关联。所以我们可以将线程池的运行分为两部分:线程管理、任务管理

任务管理部分充当生产者
线程管理部分充当消费者

任务管理部分负责分发、缓冲或者拒绝任务,也就是生产者。
线程管理部分负责消费任务,任务执行完会获取新任务,获取不到任务会被回收。

二、生命周期管理

线程池运行的状态,并不是用户显式设置的,而是伴随着线程池的运行,由内部来维护。
所以我们应该设计一个变量,标记着线程池的运行状态以及线程数量(为什么包含线程数?一个线程池都没有线程,还叫线程池?没线程了说明差不多寄了)。
于是线程池的生命周期,运行状态即被这个变量控制了。(感觉不需要说细节,思路即可)

三、任务执行机制

在这里插入图片描述
这部分应该玩不出什么花来了,我大概说说吧。
思路:
1.首先学习现有机制(解释一遍执行流程)
2.然后要选择任务队列的数据结构(BlockingQueue等)
3.任务拒绝(原生4种,也可自己定制)

四、线程管理

线程是线程池内的资源,线程池应当掌握线程状态并维护线程的生命周期(如原线程池中Worker线程)。
比如,线程什么时候才回收?什么时候创建?这是需要考虑的。这里不多说,毕竟思路。

尾声

思路还是好聊的,关键如果抠细节就太麻烦了,话说如果希望深入了解的请看看原文:美团文章

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值