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();
View Code

相关文章:

  • 2021-12-31
  • 2021-06-16
  • 2022-02-22
  • 2022-01-10
  • 2022-02-04
  • 2021-09-06
  • 2022-02-09
猜你喜欢
  • 2021-11-19
  • 2021-12-29
  • 2021-10-21
相关资源
相似解决方案