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

前言

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

具体思路

一、总体设计

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

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

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

二、生命周期管理

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

三、任务执行机制

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

四、线程管理

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

尾声

经验分享 程序员 微信小程序 职场和发展