跳转至
用户认证 - eMac Tech Docs

用户认证

重要提醒

为了您的权益以及学习体验,请不要外借账号!

如果您没有账号或忘记密码,请联系管理员重置密码。

请输入您的登录信息

线程池

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() // 拒绝策略
);

拒绝策略对比

  1. AbortPolicy:直接抛出异常(默认)
  2. CallerRunsPolicy:由调用线程执行
  3. DiscardPolicy:直接丢弃任务
  4. 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);
        // 记录任务执行情况
    }
}

调优建议

  1. CPU密集型:核心线程数=CPU核数+1
  2. IO密集型:核心线程数=CPU核数*2
  3. 混合型:拆分线程池分别处理
  4. 队列选择
    • 快速响应:SynchronousQueue
    • 缓冲任务:LinkedBlockingQueue
  5. 监控指标
    • 活跃线程数
    • 队列堆积
    • 任务耗时