线程池是Java并发编程中的核心工具,它通过复用线程来减少创建/销毁线程的开销,提高系统性能和资源利用率。以下是线程池的全面解析和创建方法:
一、线程池核心概念
1. 线程池的优势
优势 | 说明 |
---|---|
降低资源消耗 | 复用已创建的线程,减少线程创建销毁的开销 |
提高响应速度 | 任务到达时无需等待线程创建 |
提高可管理性 | 统一分配、调优和监控线程资源 |
防止系统过载 | 通过队列和拒绝策略缓冲过量任务 |
2. 线程池核心参数
ThreadPoolExecutor(
int corePoolSize, // 核心线程数
int maximumPoolSize, // 最大线程数
long keepAliveTime, // 空闲线程存活时间
TimeUnit unit, // 时间单位
BlockingQueue<Runnable> workQueue, // 任务队列
RejectedExecutionHandler handler // 拒绝策略
)
二、线程池创建方式
1. 通过ThreadPoolExecutor直接创建(推荐)
ExecutorService customPool = new ThreadPoolExecutor(
4, // 核心线程数
8, // 最大线程数
60, // 空闲线程存活时间(秒)
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(100), // 有界任务队列
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);
2. 使用Executors工厂方法(简单但不推荐生产环境)
工厂方法 | 特点 |
---|---|
newFixedThreadPool(int n) |
固定大小线程池,无界队列 |
newCachedThreadPool() |
可扩容线程池,适合短时异步任务 |
newSingleThreadExecutor() |
单线程池,保证任务顺序执行 |
newScheduledThreadPool(int) |
支持定时/周期性任务 |
示例:
// 固定大小线程池
ExecutorService fixedPool = Executors.newFixedThreadPool(4);
// 定时任务线程池
ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(2);
scheduledPool.scheduleAtFixedRate(() -> {
System.out.println("定时任务执行");
}, 1, 5, TimeUnit.SECONDS); // 初始延迟1秒,每隔5秒执行