参考文档

https://www.toutiao.com/i6820216970252648971/?timestamp=1611647531&app=news_article_lite&use_new_style=1&req_id=2021012615521001013003701233060951&share_token=d49da611-6e37-46ae-90ea-9a51d6e3ad7b&group_id=6820216970252648971

https://www.cnblogs.com/nullzx/p/5184164.html

参数说明

  • corePoolSize => 线程池核心线程最大数量
  • maximumPoolSize => 线程池最大数量(线程池中能拥有最多线程数)
  • keepAliveTime => 空闲线程存活时间(没有超过核心线程数则不销毁)
  • unit => 时间单位
  • workQueue => 线程池所使用的缓冲队列(用于缓存任务、阻塞队列)
  • threadFactory => 线程池创建线程使用的工厂
  • handler => 线程池对拒绝任务的处理策略

常用的线程池

  • CachedThreadPool:创建非核心线程来完成任务(核心线程和队列均为0) 适用于IO密集型
  • SingleThreadPool: 创建1个核心线程(无限队列)
  • Fix:创建固定的核心线程数(无限队列) 适用于CPU密集型

LinkedBlockingQueue:可以指定容量大小,默认为Integer.MAX
SynchronousQueue: 容量为0

线程池工作流程

拒绝策略

  • AbortPolicy
    默认拒绝策略,丢弃任务,抛出异常RejectedExecutionException
  • DiscardPolicy
    丢弃任务,不抛出异常
  • DiscardOldestPolicy
    丢弃队列最早的未处理任务,然后重新尝试执行任务
  • CallerRunsPolicy
    由调用线程处理该任务