ThreadPoolExecutor使用方式、工作机理以及参数的详细介绍,请参照《第十二章 ThreadPoolExecutor使用与工作机理 》
1、源代码主要掌握两个部分
- 线程池的创建:构造器
- 提交任务到线程池去执行:execute()
2、构造器
2.1、一些属性:
/** * runState provides the main lifecyle control, taking on values: * * RUNNING -> SHUTDOWN * On invocation of shutdown(), perhaps implicitly in finalize() * (RUNNING or SHUTDOWN) -> STOP * On invocation of shutdownNow() * SHUTDOWN -> TERMINATED * When both queue and pool are empty * STOP -> TERMINATED * When pool is empty */ volatile int runState; static final int RUNNING = 0;//接收新的任务,会处理队列中的任务 static final int SHUTDOWN = 1;//不接收新的任务,但是会处理队列中的任务 static final int STOP = 2;//不接收新的任务,也不会处理队列中的任务,而且还会中断正在执行的任务 static final int TERMINATED = 3;//STOP+中止所有线程 private final BlockingQueue<Runnable> workQueue;//队列 /** * 对poolSize, corePoolSize, maximumPoolSize, runState, and workers set上锁 */ private final ReentrantLock mainLock = new ReentrantLock(); /** * 支持awaitTermination的等待条件 */ private final Condition termination = mainLock.newCondition(); /** * pool中的所有工作线程集合;仅仅在持有mainLock的时候才允许被访问 */ private final HashSet<Worker> workers = new HashSet<Worker>(); private volatile long keepAliveTime; /** * false(默认):当核心线程处于闲置状态时,也会存活 * true:核心线程使用keepAliveTime来决定自己的存活状态 */ private volatile boolean allowCoreThreadTimeOut; /** * Core pool size,仅仅在持有mainLock的时候才允许被更新, * 因为是volatile允许并发读(即使是在更新的过程中) */ private volatile int corePoolSize; /** * Maximum pool size, 其他同上 */ private volatile int maximumPoolSize; /** * Current pool size, 其他同上 */ private volatile int poolSize; /** * 回绝处理器 */ private volatile RejectedExecutionHandler handler; /** * 所有的线程都通过这个线程工厂的addThread方法来创建。 */ private volatile ThreadFactory threadFactory; /** * Tracks largest attained pool size. */ private int largestPoolSize; /** * 已经完成的任务数.仅仅在工作线程被终结的时候这个数字才会被更新 */ private long completedTaskCount; /** * 默认的回绝处理器(回绝任务并抛出异常) */ private static final RejectedExecutionHandler defaultHandler = new AbortPolicy();