首先说明的是,这个和 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.尝试终止).
分享到:
相关推荐
《JDK之ThreadPoolExecutor源码分析1》 在Java编程中,线程池是一种高效的管理线程的方式,它通过复用已存在的线程来避免频繁创建和销毁线程带来的开销。ThreadPoolExecutor作为Java中的线程池实现,其内部机制相当...
ThreadPoolExecutor源码解析.md
线程池ThreadPoolExecutor底层原理源码分析
### 线程池 `ThreadPoolExecutor` 原理源码分析 #### 一、概述 线程池作为 Java 并发编程中的重要组件,在实际应用中被广泛使用。其核心类 `ThreadPoolExecutor` 实现了对线程的管理、调度等功能。本文将围绕 `...
### 二、线程池的五种状态变换源码分析 线程池状态的变化主要由以下几个状态表示: - **RUNNING**:线程池接受新的任务并将队列中的任务提交给worker线程。 - **SHUTDOWN**:不再接受新任务,但继续处理队列中的...
线程池ThreadPoolExecutor的源码分析,含中文注释,深入了解线程池的构造
根据提供的文件信息,我们可以深入探讨线程池`ThreadPoolExecutor`的工作原理及其实现细节,同时也会涉及并发编程中的一些关键概念和技术。 ### 线程池`ThreadPoolExecutor`概述 `ThreadPoolExecutor`是Java中非常...
《JUC并发编程与源码分析视频课》是一门深入探讨Java并发编程的课程,主要聚焦于Java Util Concurrency(JUC)库的使用和源码解析。JUC是Java平台提供的一组高级并发工具包,它极大地简化了多线程编程,并提供了更...
于是乎到现在的Hibernate、MyBatis、Spring、Spring MVC、AQS、ThreadPoolExecutor、CountDownLatch使用场景和核心源码分析。 感觉自己还是真的菜鸡,有太多框架的底层实现都不怎么了解。 当山头被一座一座攻克时,...
JDK1.8源码分析 相关的原始码分析结果会以注解的形式体现到原始码中 已完成部分: ReentrantLock CountDownLatch Semaphore HashMap TreeMap LinkedHashMap ConcurrentHashMap 执行器 ...
这个压缩包"Android 上百实例源码分析以及开源分析 集合打包下"提供了丰富的资源,旨在帮助开发者们通过实例学习和剖析Android应用的实现细节。下面将详细讨论这个资源包中的主要知识点。 1. **Android基础知识**:...
"java并发源码分析之实战编程"这个主题深入探讨了Java平台上的并发处理机制,旨在帮助开发者理解并有效地利用这些机制来提高程序性能和可扩展性。在这个专题中,我们将围绕Java并发库、线程管理、锁机制、并发容器...
本文将深入探讨Java线程池的源码分析,并对比不同类型的线程池,以帮助开发者更好地理解和利用这一强大的工具。 首先,我们要理解Java线程池的核心类`java.util.concurrent.ThreadPoolExecutor`,它是所有自定义...
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中的`ThreadPoolExecutor`来抓取论坛帖子列表,结合源码分析和实用工具的应用。 首先,我们要了解线程池的基本原理。线程池是由一组预先创建的线程组成的,这些线程可以复用,而不是每次...
Java并发包源码分析(JDK1.8):囊括了java.util.concurrent包中大部分类的源码分析,其中涉及automic包,locks包(AbstractQueuedSynchronizer、ReentrantLock、ReentrantReadWriteLock、LockSupport等),queue...
书中还特别提及了线程池的创建和管理,以及通过ThreadPoolExecutor类的源码分析,揭示线程池的工作原理。 在**基础案例篇**,作者通过实际问题,如并发编程中的常见问题和挑战,引导读者理解并发编程中的可见性和...