【并发编程】-- ThreadPoolExecutor线程池执行器(2)

145 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情

ThreadPoolExecutor核心数据结构

ThreadPoolExecutor的核心数据结构和变量部分源码如下:

public class ThreadPoolExecutor extends AbstractExecutorService {
     ......
    
     
    private final Condition termination = mainLock.newCondition();

    
    private int largestPoolSize;


    private long completedTaskCount;

   
    private volatile ThreadFactory threadFactory;

    
    private volatile RejectedExecutionHandler handler;

    
    private volatile long keepAliveTime;

    
    private volatile boolean allowCoreThreadTimeOut;

    
    private volatile int corePoolSize;
    
   
    private volatile int maximumPoolSize;

    
    private static final RejectedExecutionHandler defaultHandler =
        new AbortPolicy();

   
    private static final RuntimePermission shutdownPerm =
        new RuntimePermission("modifyThread");

 
    private final AccessControlContext acc;
    
    private final class Worker
        extends AbstractQueuedSynchronizer
        implements Runnable
    {
        
        private static final long serialVersionUID = 6138294804551838833L;

       
        final Thread thread;
        
        Runnable firstTask;
       
        volatile long completedTasks;

        
        Worker(Runnable firstTask) {
        //设置AQS中的state为-1,在runWorker方法调用前不允许中断。
            setState(-1); 
            this.firstTask = firstTask;
            this.thread = getThreadFactory().newThread(this);
        }

     
    }

}

mainLock.newCondition()方法:支持awaitTerminate的等待条件,即外部可以通过这个条件变量来等待线程池termination。

largestPoolSize变量:用于追踪线程池中出现最大的线程数,需要上mainLock锁访问。

completedTaskCount变量:统计线程已经执行完成的任务数,这个值只在worker线程终结时进行更新,需要上mainLock锁访问。

volatile ThreadFactory threadFactory变量:用户自定义的所有后边梁都可以通过volatile来修饰,保证了线程的可见性,创建线程的工厂。

volatile RejectedExecutionHandler handler变量:线程池饱和后执行的拒绝执行策略。

volatile long keepAliveTime变量:线程创建后在线程池中的保活时长,由于线程创建后会消耗操作系统的资源,因此这个变量用于控制线程在空闲多久被回收。

allowCoreThreadTimeOut变量:是否允许核心线程数超时回收,默认是false。

corePoolSize变量:核心线程数大小。

maximumPoolSize变量:最大线程数大小。

new AbortPolicy()方法:线程池饱和后默认的拒绝策略。

new RuntimePermission("modifyThread")方法:设置shutdown和shutdownNow调用方所需的权限。

AccessControlContext acc变量:执行终结器时要使用的上下文。

Worker类:用于封装线程和执行任务,该类继承了AQS,说明具有同步器的特性。

Thread thread变量:worker运行的线程对象,由用户提供的TheadFactory创建。

Runnable firstTask变量:初始执行的任务,可能为null。

completedTasks变量:当前woker执行完成的任务数。