一.ThreadPoolExecutor作用概述
jdk1.5之前,我们都是自己写代码对于线程池的管理我们来管理线程池。jdk1.5为我们提供了一个管理线程的类ThreadPoolExecutor,我们暂且把它称之为线程池好了。有了它我们需要把任务提交过来,至于怎么内部怎么创建线程去执行任务,怎么销毁,我们都不需要关心了。
二.
ThreadPoolExecutor几个成员变量
- corePoolSize:理想线程数,建议使用的线程数。
- maximumPoolSize:最大线程数。
- poolSize:当前正在运行的线程数。
- BlockingQueue<Runnable> workQueue:队列。
- keepAliveTime:如果池中当前有多于corePoolSize的线程,则这些多出的线程在空闲时间超过 keepAliveTime 时将会终止。
- RejectedExecutionHandler handler:拒绝策略,添加任务失败后如何处理该任务。
三.工作流程(直接以具体数字说明)
- 创建一个ThreadPoolExecutor实例,此时poolSize=0,从实例.execute(Runnable)添加一个新的任务开始:
- 如果正在运行的线程数量poolSize=1-5小于corePoolSize=5,那么马上创建线程运行这个任务;所以最开始的5个任务,立马创建线程执行它们。
- 如果正在运行的线程数量poolSize=5大于或等于corePoolSize=5,那么将这个任务放入队列;所以第6到第10个任务,会被放入队列。
- 如果这时候队列满了,而且正在运行的线程数量poolSize=5小于maximumPoolSize=10,那么还是要创建线程运行这个任务;所以第11到15个任务,立马创建线程执行它们。||||| 如果队列是无界的,那想放多少放多少,maximumPoolSize就无效了。
- 如果队列满了,且正在运行的线程数量poolSize=10大于或等于maximumPoolSize=10,这些任务就会把handler执行。
- 如果在上述的走到了上述的1.3步,当前运行的线程数poolSize就会大于corePoolSize,等所以线程池的所有任务完成后,它最终会收缩到 corePoolSize 的大小。
分享到:
相关推荐
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...
并发多线程从简到全 参考: 目录: [TOC] 相关文档: kwseeker/netty Executors线程池.md 1 基本概念 1.1 CPU与线程的关系 1.2 线程与进程的区别和关系 1.3 吞吐量 1.4 线程安全 1.5 线程声明周期 1.6 守护线程 1.7 ...
如果你是一名Java开发人员,并且想进一步掌握并发编程和多线程技术,并挖掘Java 7并发的新特性,那么本书是你的合适之选。 《Java 7并发编程实战手册》 第1章 线程管理 1 1.1 简介 1 1.2 线程的创建和运行...
【2018最新最详细】并发多线程教程,课程结构如下 1.并发编程的优缺点 2.线程的状态转换以及基本操作 3.java内存模型以及happens-before规则 4.彻底理解synchronized 5.彻底理解volatile 6.你以为你真的了解final吗...
Java并发编程:03-多线程并发下载器, 支持断点下载(手写不限速的迷你版迅雷) 主要是最近学习完一些初级的并发知识, 所以想使用这些知识做一个小小工具, 巩固一下知识点, 然后就想到了多线程并发下载文件的这个小工具...
(1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程...
本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则...
│ 高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │ 高并发编程第二阶段03讲、介绍三种高效优雅的Singleton实现方式.wmv │ 高并发编程第二阶段04讲、多线程的休息室WaitSet详细...
JUC(java.util.concurrent)库是 Java 标准库的一部分,提供了丰富的多线程并发工具,旨在帮助开发者编写高性能、高可伸缩性的并发程序。下面综合介绍 JUC 库的几个核心概念以及它们在并发编程中的重要性。 1. ...
│ 高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │ 高并发编程第二阶段03讲、介绍三种高效优雅的Singleton实现方式.wmv │ 高并发编程第二阶段04讲、多线程的休息室WaitSet详细...
一、Java线程池实现原理及应用(ThreadPoolExecutor) 1.使用线程池的好处 1.1. 降低资源消耗 通过池化技术重复利用已经创建的线程,降低线程创建和销毁造成的耗损 1.2.提高响应速度,任务到达时,无需等待线程创建...
调用关系:Java线程一对一映射到本地操作系统的系统线程,当多线程程序分解若干任务,使用用户级的调度器(Executor框架)将任务映射为固定数量的线程,底层,操作系统吧、内核将这些线程映射到硬件处理器上。...
(1) 线程的执行顺序 (2) 深度解析ThreadPoolExecutor类源码 (3) 从源码角度分析创建线程池究竟有哪些方式 2、基础案例篇 (1) 导致并发编程频繁出问题的“幕后黑手” (2)工作了3年的程序员小菜面试高并发岗位被吊打虐...
a:手上项目所需,因为项目主要的目的是实现多线程的数据推送;需要创建多线程的话,那就要处理好线程安全的问题;因为项目需要,还涉及到排队下载的功能,所以就选择了线程池来管理线程以及线程池里面的任务队列...
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、深入理解井发可见性、...
如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务结束了,这样频繁创建线程会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,是执行完一个...
但是,当并发的线程数量多了之后,频繁创建线程会令系统的效率大大下降。 那有没有办法可以令我们复用线程?线程在执行完一个任务之后,不会销毁,进而执行其他的任务呢? 事实上,我们可以通过线程池实现相应的功能...