大家在学习线程池的时候也曾查阅过各种资料,但是感觉大佬写的很好但是写的不够详细,写的详细的设计思路又很简单,所以我的出发点就是让读者可以清晰明确的看懂整个设计思想和设计过程,可以举一反三,在今后内存池等方面也可以游刃有余的设计出来!好了,正文开始~
线程池设计思路
线程池是什么
我们先来打个比方,线程池就好像一个工具箱,我们每次需要拧螺丝的时候都要从工具箱里面取出一个螺丝刀来,有时候需要取出一个来拧,有时候螺丝多的时候需要多个人取出多个来拧,拧完自己的螺丝那么就会把螺丝刀再放回去,然后别人下次用的时候再取出来用。也许我的例子不是太完美,但是我想我已经基本阐述清楚了线程池。说白了线程池就是相当于提前申请了一些资源也就是线程,需要的时候就从线程池中取出线程来处理一些事情,处理完毕之后再把线程放回去。
为什么需要线程池
我们来思考一个问题,为什么需要线程池呢?假如没有线程池的话我们每次调用线程是什么样子的?显然首先是先创建一个线程,然后再把任务交给这个线程,最后再把这个线程销毁掉。那么如果我们改用线程池的话,我们在程序运行的时候就会首先创建一批线程,然后交给线程池来管理。有需要的时候我们把线程拿出去处理任务,不需要的时候我们再回收到线程池中,这样是不是就避免了每次都需要创建和销毁线程这种消耗时间的操作。有人会说你使用线程池一开始就消耗了一些内存,之后一直不释放这些内存,这样岂不是有点浪费。其实这是类似于空间换时间的概念