ThreadPoolExecutor运转机制详解
ThreadPoolExecutor机制
一、概述
1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务;
2、Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。
3、先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障。同时可以根据自己的需求实现自己的线程池
二、核心构造方法讲解
下面是ThreadPoolExecutor最核心的构造方法
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime < 0) throw new IllegalArgumentException(); if (workQueue == null || threadFactory == null || handler == null) throw new NullPointerException(); this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue; this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory; this.handler = handler; }
构造方法参数讲解
参数名 | 作用 |
corePoolSize | 核心线程池大小 |
maximumPoolSize | 最大线程池大小 |
keepAliveTime | 线程池中超过corePoolSize数目的空闲线程最大存活时间;可以allowCoreThreadTimeOut(true)使得核心线程有效时间 |
TimeUnit | keepAliveTime时间单位 |
workQueue | 阻塞任务队列 |
threadFactory | 新建线程工厂 |
RejectedExecutionHandler | 当提交任务数超过maxmumPoolSize+workQueue之和时,任务会交给RejectedExecutionHandler来处理 |
重点讲解:
其中比较容易让人误解的是:corePoolSize,maximumPoolSize,workQueue之间关系。
1.当线程池小于corePoolSize时,新提交任务将创建一个新线程执行任务,即使此时线程池中存在空闲线程。并处理请求。
2.当线程池等于corePoolSize时,新提交任务将被放入workQueue中,等待线程池中任务调度执行。池子里的空闲线程就去从workQueue中取任务并处理。
3.当workQueue已满,且maximumPoolSize>corePoolSize时,新提交任务会继续创建新线程执行任务。 因为还有maximumPoolSize等着被使用,只是优先使用corePoolSize
4.当提交任务数超过maximumPoolSize时,新提交任务由RejectedExecutionHandler来做拒绝处理
5.当线程池中超过corePoolSize线程,空闲时间达到keepAliveTime时,关闭空闲线程
6.当设置allowCoreThreadTimeOut(true)时,线程池中corePoolSize线程空闲时间达到keepAliveTime也将关闭
7.当池子的线程数大于corePoolSize的时候,多余的线程会等待keepAliveTime长的时间,如果无请求可处理就自行销毁
线程管理机制图示:
转自:
http://blog.csdn.net/cutesource/article/details/6061229
http://blog.csdn.net/cutesource/article/details/6061229
感谢!
转载于:https://www.cnblogs.com/Donnnnnn/p/7237873.html
ThreadPoolExecutor运转机制详解相关推荐
- ThreadPoolExecutor运转机制详解(转)
总结:看了下文后,发现用这个线程池,还是得用上那个异常处理,再自己重写,异常时的处理.这样才不会丢任务. 原文:http://blog.csdn.net/cutesource/article/deta ...
- PHP autoload机制详解
PHP autoload机制详解 转载自 jeakccc PHP autoload机制详解 (1) autoload机制概述 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个 ...
- 模糊匹配 读音_onenote搜索机制详解②:两种搜索模式,模糊与精确匹配
先从纯文本搜索讲起,这是最基本也是最重要的. 从这篇开始,以及接下来连续几篇文章,都会介绍搜索的基础功能.注意,这几篇文章中谈论的都是基本的.正常的搜索功能,暂时不考虑Bug等因素. 在很多软件(例如 ...
- Java类加载机制详解【java面试题】
Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...
- Numpy的广播机制详解(broadcasting)
Numpy的广播机制详解(broadcasting) 广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数 ...
- Session机制详解及分布式中Session共享解决方案
Session机制详解及分布式中Session共享解决方案 参考文章: (1)Session机制详解及分布式中Session共享解决方案 (2)https://www.cnblogs.com/jing ...
- java异常处理机制详解
java异常处理机制详解 参考文章: (1)java异常处理机制详解 (2)https://www.cnblogs.com/vaejava/articles/6668809.html 备忘一下.
- SpringMVC异常处理机制详解[附带源码分析]
SpringMVC异常处理机制详解[附带源码分析] 参考文章: (1)SpringMVC异常处理机制详解[附带源码分析] (2)https://www.cnblogs.com/fangjian0423 ...
- 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
2019独角兽企业重金招聘Python工程师标准>>> 在运行时期可以按照Java虚拟机规范对class文件的组织规则生成对应的二进制字节码.当前有很多开源框架可以完成这些功能,如A ...
- JAVA之JVM垃圾回收(GC)机制详解
一.为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此.所以,垃圾回收是必须的. 二. ...
最新文章
- 智能驾驶操作系统OS
- 电脑画画软件_手绘、板绘、还有用pad画画都有啥区别?
- udp模拟tcp java_Java简单实现UDP和TCP
- [再寄小读者之数学篇](2014-11-14 矩阵的应用: 有限几何)
- win11如何自动启用禁用设置时区 windows11自动启用禁用设置时区的步骤方法
- allennlp 版本关系
- python爬虫实例评论_python爬取微博评论的实例讲解
- 一起学JAVA 接口 面向接口开发
- 浅谈怎样入侵服务器,仅供学习用
- 计算机节能+关闭硬盘,优化三:CPU节能关闭_固态硬盘-中关村在线
- 计算机如何把应用储存进u盘,怎样把word中的内容保存进u盘 怎样把word文档放到u盘里?...
- 计算机教室云教学反思,《观察云》教学反思
- MySQL架构 数据库(1)
- 使用canal1.1.5让MySQL5.7同步到ES7.x
- android 粒子爆炸特效
- 在ArcGIS Pro2.2中玩转聚焦地图
- 国讯通用OA协同办公系统源码
- 零基础,如何学习CAD和3Dmax,有什么学习计划吗?
- 全网流行的黑白照片上色技术,看看飞桨开发者是如何实现的
- 焦化厂有害气体检测传感器选型
热门文章
- VB API 之 第七课 字体应用四
- $(function() {});和$(document).ready(function() {});区别
- Linux-安装python3环境
- php值传递和引用传递
- Handsontable 自定义菜单 自定义命令存放位置
- Mybatis接口方式
- hge引擎写的一个扫雷小游戏
- 一个景点的给input域一个默认值,然后在聚焦的时候清空它 jquery方法
- 2018大盘点 | R语言中文社区十大火爆文章
- 如何使用 ggplot2 ?