【Java面试笔记:进阶】21.Java并发类库提供的线程池有哪几种? 分别有什么特点?
Java 并发类库通过 java.util.concurrent.Executors
工厂类提供了多种预配置的线程池,每种线程池针对不同的使用场景设计。
1. Java线程池类型及特点
1.newCachedThreadPool()
- 适用于大量短时间任务。
- 尝试缓存线程并重用,无缓存线程时创建新线程。
- 线程闲置超过60秒会被终止。
- 内部使用
SynchronousQueue
作为工作队列。 - 核心参数:
- 核心线程数 = 0,最大线程数 = Integer.MAX_VALUE。
- 线程空闲时间:60 秒。
- 工作队列:
SynchronousQueue
(直接传递队列)。
- 创建方式
ExecutorService executor = Executors.newCachedThreadPool();
2.newFixedThreadPool(int nThreads)
- 重用固定数目的线程。
- 使用无界工作队列,最多有
nThreads
个活动线程。 - 任务数量超过活动线程数时,任务会在队列中等待。
- 核心参数:
- 核心线程数 = 最大线程数(固定线程数)。
- 工作队列:无界
LinkedBlockingQueue
。
- 创建方式
ExecutorService executor = Executors.newFixedThreadPool(int nThreads);
3.newSingleThreadExecutor()
- 限制为单个工作线程。
- 使用无界工作队列&#