Java 线程池是 java.util.concurrent 包下的线程管理工具,核心作用是复用线程、控制并发数、降低线程创建销毁的性能损耗。
1. 核心原理
线程池维护一个线程队列,任务提交时,若核心线程有空闲则直接执行;核心线程满了就把任务放入等待队列;队列满了再创建非核心线程;非核心线程也满了则触发拒绝策略。
2. 核心参数(以 ThreadPoolExecutor 为例)
◦ 核心线程数:线程池长期存活的线程数量,即使空闲也不会销毁(除非设置了 allowCoreThreadTimeOut)。
◦ 最大线程数:线程池允许创建的最大线程数量。
◦ 空闲时间:非核心线程空闲超过这个时间会被销毁。
◦ 等待队列:存放待执行任务的阻塞队列。
◦ 拒绝策略:任务数超过线程池最大处理能力时的处理方式(如抛出异常、丢弃任务等)。
3. 创建方式
◦ 推荐直接使用 ThreadPoolExecutor 手动创建,参数可控,避免 Executors 工具类创建的线程池出现资源耗尽问题。
◦ Executors 提供了快捷创建方法(如 newFixedThreadPool 固定线程数、newCachedThreadPool 缓存线程池),适合简单场景。
4. 核心优势
减少线程频繁创建销毁的开销,控制并发任务数量防止系统过载,还能统一管理任务的提交、执行和结果获取。