Java线程池的工作流程

线程池刚被创建的时候,只是向系统里申请一个用于执行流程队列和管理线程池的线程资源。在调用execute()添加一个任务时,线程池会按照以下流程执行:
1、如果正在运行的线程数少于corePoolSize(用户定义的核心线程数),线程池就会立刻创建线程并执行该线程任务;
2、如果正在运行的线程数大于corePoolSize,该任务就会被放入阻塞队列中;
3、如果阻塞队列已满且正在运行的线程数少于maximumPoolSize时,线程池会创建非核心线程立刻执行该线程任务;
4、在阻塞队列已满并且正在运行的线程数大于maximunPoolSize时,线程池将会拒绝执行该任务并且抛出拒绝异常RejectExecutionException;
5、在线程执行完毕后,该任务会从线程队列中移除,然后从队列中取下一个任务继续执行;
6、在线程处于空闲的时间超过keepAliveTime,并且正在运行的线程数大于corePoolSize, 该线程将会被认为是空闲线程并停止;所以线程任务都执行完毕后,线程池会收缩到corePoolSize大小。
Java线程池的工作流程的更多相关文章
- Java线程池的工作原理与实现
		简单介绍 创建线程有两种方式:继承Thread或实现Runnable.Thread实现了Runnable接口,提供了一个空的run()方法,所以不论是继承Thread还是实现Runnable,都要有自 ... 
- Java线程池进阶
		线程池是日常开发中常用的技术,使用也非常简单,不过想使用好线程池也不是件容易的事,开发者需要不断探索底层的实现原理,才能在不同的场景中选择合适的策略,最大程度发挥线程池的作用以及避免踩坑. 一.线程池 ... 
- 深入浅出JAVA线程池使用原理1
		前言: Java中的线程池是并发框架中运用最多的,几乎所有需要异步或并发执行任务的程序都可以使用线程池,线程池主要有三个好处: 1.降低资源消耗:可以重复使用已经创建的线程降低线程创建和销毁带来的消耗 ... 
- 深入理解Java线程池:ThreadPoolExecutor
		线程池介绍 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题: 如果并发的请求数量非常多,但每个线 ... 
- java线程池实践
		线程池大家都很熟悉,无论是平时的业务开发还是框架中间件都会用到,大部分都是基于JDK线程池ThreadPoolExecutor做的封装, 都会牵涉到这几个核心参数的设置:核心线程数,等待(任务)队列, ... 
- ThreadPoolExecutor源码分析-面试问烂了的Java线程池执行流程,如果要问你具体的执行细节,你还会吗?
		Java版本:8u261. 对于Java中的线程池,面试问的最多的就是线程池中各个参数的含义,又或者是线程池执行的流程,彷佛这已成为了固定的模式与套路.但是假如我是面试官,现在我想问一些更细致的问题, ... 
- java线程池,工作窃取算法
		前言 在上一篇<java线程池,阿里为什么不允许使用Executors?>中我们谈及了线程池,同时又发现一个现象,当最大线程数还没有满的时候耗时的任务全部堆积给了单个线程, 代码如下: T ... 
- Java线程池工作原理
		前言 当项目中有频繁创建线程的场景时,往往会用到线程池来提高效率.所以,线程池在项目开发过程中的出场率是很高的. 那线程池是怎么工作的呢?它什么时候创建线程对象,如何保证线程安全... 什么时候创建线 ... 
- JAVA线程池原理详解一
		线程池的优点 1.线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用. 2.可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃. 线 ... 
随机推荐
- [系统重装日志3]autocad和ps破解安装
			cad 以前保存的安装包注册机还让杀毒软件给自动删除了!!!(╯‵□′)╯︵┻━┻!!!又在网上找的注册机!!!(╯‵□′)╯︵┻━┻!!!软件安装包必须保存一份压缩的!!!(╯‵□′)╯︵┻━┻!! ... 
- 使用 Kubernetes 扩展专用游戏服务器
			系列 探索使用 Kubernetes 扩展专用游戏服务器:第 1 部分-容器化和部署 探索使用 Kubernetes 扩展专用游戏服务器:第 2 部分-管理 CPU 和内存 探索使用 Kubernet ... 
- 巧用 SVG 滤镜还能制作表情包?
			本文将介绍一些使用 SVG feTurbulence 滤镜实现的一些有趣.大胆的的动效. 系列另外两篇: 有意思!强大的 SVG 滤镜 有意思!不规则边框的生成方案 背景 今天在群里面聊天,看到有人发 ... 
- 【linux】驱动-7-平台设备驱动
			目录 前言 7. 平台设备驱动 7.1 平台总线 7.1.1 平台总线注册和匹配方式 7.1.2 源码分析 7.2 平台设备 7.2.1 platform_device 7.2.2 设备信息 7.2. ... 
- Python异步asyncio快速实践模版
			只是参考快速跑起来模版,细节或者封装流畅使用需要详细阅读aiohttp文档 1 import asyncio 2 3 async def foo(): 4 await print('bar') 5 6 ... 
- TypeError: Can't convert 'int' object to str implicitly Python常见错误
			尝试连接非字符串值与字符串 想要字符串连接非字符串需要先进行强制转化 可以用str()函数 -------------------------------- 
- K8S 本地 配置 Local PV 实践
			上面我们创建了后端是 hostPath 类型的 PV 资源对象,我们也提到了,使用 hostPath 有一个局限性就是,我们的 Pod 不能随便漂移,需要固定到一个节点上,因为一旦漂移到其他节点上去了 ... 
- SCIP:构造数据抽象--数据结构中队列与树的解释
			现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示的对象.不应该在这里停滞不前,有许多操作可以应用于这些符号,而根本不必考虑它们到底代表着什么东西. --Hermann Weyi <思维的 ... 
- js 更改json的 key
			let t = data.map(item => { return{ fee: item['费用'], companyName1: item.companyName, remark1: item ... 
- Dynamics CRM实体系列之字段
			本节开始讲实体中的基础数据存储对象,也就是字段. Dynamics CRM目前总共有13种字段类型,分别为单行文本.选项集.多选选项集.两个选项.图像.整数.浮点数.十进制数.货币.多行文本.日期和时 ... 
