线程池源码解析
前言 Java提供了若干种线程池,常用的线程池是ThreadPoolExecutor,其中用于提交任务的方法是execute以及submit方法,其中submit最终也是会调用execute方法,所以这里只介绍excute及其相关方法。 在介绍源码之前,希望读者对于线程池参数有基本了解会有助于理解代码,可以查看这篇文章 https://juejin.im/post/5cae9b42f265da03705fa152 。 主要成员变量 1 // 线程池状态量,高3未用于表示线程池运行状态,低29位用于表示线程池的线程数 2 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); 3 private static final int COUNT_BITS = Integer.SIZE - 3; 4 // 线程池最大容量,这里是程序硬性规定的最大数量,优先级高于maximumPoolSize 5 private static final int CAPACITY = (1 << COUNT_BITS) - 1; 6 7 // 线程池运行状态 8 private static final int RUNNING = -1 << COUNT_BITS; 9 private static final