请问老师, 线程池中的线程能回收复用吗。

来源:8-3 线程池-3

搬砖战士

2018-09-27

请问老师, 线程池中的线程能回收复用吗。
如果有十个任务 + 一个线程池【核心线程=2, 最大线程=10】。
是不是必须new10个线程, 丢进线程池; 还是能够只new少于10个线程, 然后反复使用这些线程。
写回答

1回答

Jimin

2018-09-28

你好,课程里有专门讲线程池的地方,线程池本身就是要解决你这个问题,不会不停的创建新线程的。你可以重点关注一下。线程池里有核心线程一说,当然具体能复用到什么程度,还与你设置的线程池的参数有关。

0
5
搬砖战士
回复
Jimin
老师你好。 我的意思,大致是【无法减少new Runnbale的次数】。 通过阅读源码, 我对线程池的理解, 是线程池有效控制了能获取CPU时间片的线程的数量, 线程池用worker对我传进去的runnbale做了一层再封装, worker把execute,submit进去的runnbale实例理解为了一个task, 每当从queue中获取到task, worker就会去执行这个task并且让这个task的线程生命周期走向完结, 但是worker本身又恢复到等待queue中出现任务的状态。这样能获取CPU时间片的线程数量就受到了很好的控制。 我的疑惑是在于, worker和我们传进去的task本质都是一个线程, 线程池能有效复用worker, 但是无法复用我们new出来的runnable, 比如说有1万个任务, 由始至终运行的worker可能只有2-3个, 但是我们还是会去new 1万个runnbale出来并且submit给线程池。
2018-10-06
共5条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程