Files
Hui-s-notebook/Java 并发包中线程池 ThreadPoolExecutor 原理探究.md
2023-09-10 10:50:53 +08:00

1.7 KiB
Raw Permalink Blame History

介绍

Executor 是一个工具类,内部提供了许多静态方法,根据用户选择返回不同线程池实例, ThreadPoolExecutor 继承 AbstractExecutorService 成员变量 ctl 是一个 Integer 的原子变量,用于记录线程池状态和线程池中线程个数,

线程池状态

  • RUNNING接收新任务并处理阻塞队列里的任务
  • SHUTDOWN拒绝新任务但是处理阻塞队列里的任务
  • STOP拒绝新任务并抛弃阻塞队列里的任务同时中断正在处理的任务
  • TIDYING所有任务都执行完成包含阻塞队列后当前线程池活动线程数量为 0将要调用 terminated 方法
  • TERMINATED终止状态terminated 方法调用后的状态

线程池参数

  • corePoolSize线程池核心线程个数
  • workQueue用于保存等待执行任务的阻塞队列
  • maximunPoolSize最大线程数量
  • ThreadFactory创建线程的工厂
  • RejectedExecutionHandler饱和策略AbortPolicy抛出异常CallRunsPolicy使用调用者所在线程执行DiscardOldestPolicy调用 poll 丢弃一个任务执行当前任务DiscardPolicy默默丢弃不抛出异常
  • keepAliveTime存活时间闲置线程最大存活时间
  • TimeUnit存活时间的时间单位

线程池类型

  • newFixedThreadPool核心线程个数和最大线程个数都为 nThreads 的线程池,阻塞队列长度为 Integer. MAX_VALUE
  • newSingleThreadExecutor核心线程数和最大线程数位 1 的线程池
  • newCachedThreadThreadPool按需创建线程的线程池初始个数为 0最多线程个数为 Integer. MAX_VALUE阻塞队列为同步队列

类图介绍

public void executeRunnable command

workerRunnable firstTask

源码分析