先附上学习链接(需要的时候自己也可以看)https://blog.csdn.net/he90227/article/details/52576452
今天简单看了线程池,就突然感觉各种带 “池” 字的都差不多一个道理,像内存池,数据库连接池。。
简单描述一下,一个池子,有个最佳容量和一个最大容量,开始没有线程。
有任务过来时,看看池子到没到最佳容量,到了去外面排队(队伍数量有限制),
排队可能有两种情况,队伍没满,你排队;队伍满了,看看池子到没到最大容量,没到就给你线程,到了抛出异常。
你干完活把线程还给池子。池子的线程稳定在最佳容量。
再简单来说,就是你去吃九宫格火锅(锅就是线程池),每个小格子是一个线程,每个鱼丸是一个任务(假设一个格子只能放一个鱼丸),服务员拿过来鱼丸,如果格子没满,你可以放到格子里,如果格子满了,鱼丸就要在盘子里等,等某个鱼丸熟了,捞出去然后放进去盘子前段的第一个鱼丸。
线程复用就是每个格子就在那里,你不煮鱼丸,也不会把它销毁。
控制最大并发数,就是只有9个格子,多了没地方放。
ps:四种线程池:
1.newCachedThreadPool
2.newFixedThreadPool
3.newSingleThreadPool
4.newScheduleThreadPool