首先说明的是,这个和 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源码解析.md
1. 任务提交到线程池中,首先会检测线程池中核心线程数是否已经到达到达上限,若未到达则执行步骤2,反之执行步 2. 初始化一条线程执行任务 3. 尝试将任务放到
线程池ThreadPoolExecutor底层原理源码分析
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
Java,线程池,ThreadPoolExecutor
线程池ThreadPoolExecutor的源码分析,含中文注释,深入了解线程池的构造
于是乎到现在的Hibernate、MyBatis、Spring、Spring MVC、AQS、ThreadPoolExecutor、CountDownLatch使用场景和核心源码分析。 感觉自己还是真的菜鸡,有太多框架的底层实现都不怎么了解。 当山头被一座一座攻克时,...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
11-线程池 ThreadPoolExecutor 底层原理源码分析(上)-周瑜.pdf 12-线程池 ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf 13、线程池 ForkJoinPool实战及其工作原理分析 (1).pdf 14、深入理解井发可见性、...
Java并发包源码分析(JDK1.8):囊括了java.util.concurrent包中大部分类的源码分析,其中涉及automic包,locks包(AbstractQueuedSynchronizer、ReentrantLock、ReentrantReadWriteLock、LockSupport等),queue...
分析一波: 1.ctl (线程池控制状态)是 原子整型 的,这意味这 对它进行的操作具有原子性。 2.如此一来,作为 ctl 组成部分的 runState (线程池生命周期状态)和 workerCount (工作线程数) 也将同时具有原子性。 3....
ArchKnowledgeTree ... 源码分析之Java线程池ThreadPoolExecutor 常见工具 [源码分析之Guava RateLimiter源码分析](source_code/源码分析之Guava RateLimiter源码分析.md) 源码分析之netty线程模型 Mes
JDK1.8源码分析 相关的原始码分析结果会以注解的形式体现到原始码中 已完成部分: ReentrantLock CountDownLatch Semaphore HashMap TreeMap LinkedHashMap ConcurrentHashMap 执行器 ...