欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ThreadPoolExecutor 源码分析

程序员文章站 2022-04-19 11:09:46
...

首先说明的是,这个和 ReadWriteLock 一样,同样是使用一个状态,包含两部分含义,一部分是线程池的运行状态,一个是线程池中的 Worker 数量.

corePoolSize: 核心线程的数量.

maximumPoolSize: 线程池中允许的最大线程数.

keepAliveTime: 空闲线程等待的时间,超过这个时间,则销毁.

largestPoolSize: 跟踪线程池中的最大线程数

allowCoreThreadTimeOut: 是否允许核心线程超时,若允许核心线程超时,那么 keepAliveTime 同样对核心线程有效.

当线程池执行 execute 方法时:

1.判断当前的线程数 < 核心线程数
    直接创建 Worker(addWorker)

addWorker:
    先检查运行状态
    如果线程池关闭了等情况下,创建失败
    workCount+1
    创建一个 Worker

    如果当前线程数 > 核心线程数
    那么当前任务入 workQueue 队列.

    然后调用 runWorker 方法,runWorker 方法是一个循环,会处理存放在 BlockingQueue 队列中的线程, 如果 Blocking 也存放满了,那么就直接创建非核心线程.  如果创建非核心Worker 也失败了的话,那么就拒绝 Command.

在 addWorker 方法中,当创建好了 Worker 时,则调用 Worker.run 方法. 如果添加失败,则回滚(1.从 workers 集合中移除当前 worker. 2.worker数量-1. 3.尝试终止).
相关标签: ThreadPoolExecutor