线程池 ThreadPoolExecutor 原理及源码笔记
前言 " 前面在学习 JUC 源码时,很多代码举例中都使用了线程池 ThreadPoolExecutor ,并且在工作中也经常用到线程池,所以现在就一步一步看看,线程池的源码,了解其背后的核心原理。 " 1 介绍 什么是线程池 " 线程池(英语:thread pool :一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。 —— 维基百科 为什么要使用线程池 降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。 提高响应速度:任务到达时,无需等待线程创建即可立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。 如何使用线程池 线程池使用有很多种方式,不过按照《Java 开发手册》描述,尽量还是要使用 ThreadPoolExecutor 进行创建。 代码举例: ExecutorService pool = new ThreadPoolExecutor( 5 ,