`

ThreadPoolExecutor 源码分析

阅读更多

首先说明的是,这个和 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.尝试终止).
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics