notesArea/Java/多线程/线程池核心参数设置规则.md

线程池核心参数设置规则

线程池的核心参数:

  • corePoolSize: 核心线程数
  • maximumPoolSize: 最大线程数
  • keepAliveTime: 非核心线程存活时间
  • workQueue: 任务队列

CPU 密集型任务

CPU 密集型任务的特点是任务的绝大部分时间花费在 CPU 的计算上,如压缩、音频处理、复杂计算等。

设置原则:

  • corePoolSize=CPU 核数,maximumPoolSize=CPU 核数
  • 过多的线程只会引起上下文切换,反而降低性能
  • keepAliveTime 一般设置为 30s,对 CPU 密集型任务影响不大,因为线程池核心数量和最大数量一样

IO 密集型任务

特点:

  • 大部分时间在等待 IO
  • CPU 计算占比很低

设置原则:

  • 线程数应该远大于 CPU 核心数,以便在某些线程阻塞等待的时候,其他现成可以继续使用 CPU
  • corePoolSize 为 2 倍 CPU 核数,maximumPoolSize 为 CPU 核数的 2-10 倍,根据具体压测结果而定
  • keepAliveTime 一般设置为 60s
大纲
文件