线程池
flowchart TD
    subgraph 线程池
        core[核心线程]
        queue[任务队列]
        non_core[非核心线程]
        reject[拒绝策略]
    end
线程池原理
核心参数配置
ThreadPoolExecutor executor = new ThreadPoolExecutor(
    5,    // 核心线程数
    10,   // 最大线程数
    60,   // 空闲线程存活时间(秒)
    TimeUnit.SECONDS,
    new ArrayBlockingQueue<>(100), // 任务队列
    Executors.defaultThreadFactory(), // 线程工厂
    new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
 
拒绝策略对比
- AbortPolicy:直接抛出异常(默认)
 
- CallerRunsPolicy:由调用线程执行
 
- DiscardPolicy:直接丢弃任务
 
- DiscardOldestPolicy:丢弃队列最老任务
 
监控方法
// 获取线程池状态
int activeCount = executor.getActiveCount();
long completedCount = executor.getCompletedTaskCount();
int queueSize = executor.getQueue().size();
// 扩展ThreadPoolExecutor
class MonitorThreadPool extends ThreadPoolExecutor {
    protected void afterExecute(Runnable r, Throwable t) {
        super.afterExecute(r, t);
        // 记录任务执行情况
    }
}
 
调优建议
- CPU密集型:核心线程数=CPU核数+1
 
- IO密集型:核心线程数=CPU核数*2
 
- 混合型:拆分线程池分别处理
 
- 队列选择:
- 快速响应:SynchronousQueue
 
- 缓冲任务:LinkedBlockingQueue
 
 
- 监控指标: