《线程池的执行流程》

news2024/10/7 8:23:12

目录

什么是线程池

线程池的优点 

线程池的执行流程

线程池的状态 


什么是线程池

        线程池是一种多线程处理形式,内部维护了若干个线程。

        没有线程任务的时候,线程都处于空闲状态。如果有新的线程任务,就分配给空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建新线程或者将线程任务放入工作队列中。

线程池的优点 

        1.避免了线程的重复创建,销毁,开销小。

        2.不用等线程创建,可以直接执行线程任务,速度快。

线程池的执行流程

        

        当提交线程任务后,线程池会判断是否存在空闲线程,如果存在空闲线程,会分配出空闲线程去执行线程任务。

        如果没有空闲线程,会判断核心线程数是否达到最大,如果没有就会创建核心线程并执行线程任务。

        如果线程数超过核心线程数,会判断工作队列是否已满,如果工作队列未满,将线程任务添加到工作队列。

        如果工作队列已满,会判断非核心线程数是否超出,如果未超出,创建非核心线程执行线程任务。

        如果非核心线程数也超出,那线程池将会拒绝执行。

        拒绝策略有四种:

                1.ThreadPoolExecutor.AbortPolicy:默认策略,丢弃任务并且抛出RejectedExecutionException异常。

                2.ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不会抛出异常。

                3.ThreadPoolExecutor.DiscardOldestPolicy:丢弃工作队列中队头任务。

                4.ThreadPoolExecutor.CallerRunsPolicy:由原调用线程处理该任务。 

线程池的状态 

        

        线程池有五种状态:

                Running(运行状态):当线程池创建后,线程池就处于运行状态。

                SHUTDOWN(关闭状态):在该状态下,线程池不再接收新的线程任务,但是会处理正在执行的线程任务与在工作队列的线程任务。

                STOP(停止状态):线程池不再接收新的线程任务,而且不会处理工作队列中的线程任务,正在执行的任务也会被中断。

                TIDYING(整理状态):此状态表明线程池中的所有线程任务都已运行终止。

                TERMINATED(终止状态):线程池关闭。

      

        

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法与数据结构】144、145、94LeetCode二叉树的前中后遍历(递归法、迭代法)

文章目录 一、题目二、递归算法三、迭代算法四、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、递归算法 思路分析:这道题比较简单,不多说了,大家直接看代码就行。注意前中后…

家具商城小程序:连接优质家居产品的桥梁

随着人们对家居生活品质的追求,家具商城小程序成为提供便捷购物和个性化服务的不可或缺的工具,通过家具商城小程序,用户可以浏览并购买各类家具产品,如沙发、床、桌子等。同时,家具商城小程序还提供个性化的推荐、客户…

【实战篇】docker-compose部署go项目

一、场景: 二、需求 三、实操 Stage 1:GoLand 中 build 生成二进制文件 Stage 2:编写 Dockerfile Stage 3:编写 docker-compose.yaml Stage 4:文件上传到 ubuntu 服务器上 Stage 5:运行 docker-comp…

uni-app做h5IOS底部tabbar高度在不同的tabbar页面会忽高忽低

原因不祥&#xff0c;解决办法的话在App.vue中 <style langscss> //每个页面公共css page { height:100vh; } </style>

word 2019无法打开邮箱下载的docx文档

我通过如下设置&#xff0c;打开了文档&#xff1a; 开始——选型——信任中心——信任中心设置&#xff0c;如下图 2.把宏设置改一下&#xff0c;如下图 3.把受保护的视图设置一下&#xff0c;如下图 3.文件阻止设置为默认&#xff0c;我没有改&#xff0c;如下图 结束了…

Android平台GB28181设备接入端语音广播技术探究和填坑指南

技术背景 GB/T28181-2016官方规范和交互流程&#xff0c;我们不再赘述。 SIP服务器发起广播流程示意图如下&#xff1a; 需要注意的是&#xff1a;语音广播通知、语音广播应答命令 消息头 Content-type字段为 Content-type:Application/MANSCDPxml。 语音广播通知、语音广播…

vue写车牌号 自定义键盘

vue写车牌号自定义键盘 <template><div><div class"content-wrapper"><div class"content-top-wrapper"><van-radio-group v-model"radioCarType"><van-radio name"1">蓝牌<imgslot"icon…

COC 深圳城市开发者社区【职言职语】第1季活动来袭。。。

文章目录 活动介绍活动议程活动奖品参与方式活动时间活动费用活动地点 活动介绍 &#x1f389;&#x1f465; 欢迎加入职言职语活动&#xff01;与我们一起探索职场的智慧和灵感&#xff01; &#x1f454;&#x1f4bc; 在这个快节奏的职业世界中&#xff0c;职场话题 是我们…

【实战总结】SpringMVC架构升级SpringCloudAlibaba

升级目标 SpringMVCDubboZookeeper分布式架构改为Spring Cloud Alibaba微服务 技术框架:Spring Boot 2.7.2、Spring Cloud 2021.0.3 & Alibaba 2021.0.1.0 容器:Tomcat 9.0.65 JDK:1.8 配置中心:Nacos 2.0.4 消息队列:RocetMQ 4.9.3 配置中心:Apollo 11.0 缓存: Redis 4.0…

大华智慧园区综合管理平台存在任意文件上传漏洞

大华智慧园区综合管理平台存在任意文件上传漏洞 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作…

Ceph

Ceph简介 Ceph使用C语言开发&#xff0c;是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。Ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack&#xff0c;Kubernetes都可与Ceph整合以支持虚拟机镜像的后端存储…

CMake:设置语言标准(一)

CMake:设置语言标准&#xff08;一&#xff09; 导言C标准历史C11版本特性介绍类型推导之auto和decltypeC返回值类型后置对模板实例化中连续尖括号>>的改进使用using定义别名&#xff08;替代typedef&#xff09;支持函数模板的默认参数在函数模板和类模板中使用可变参数…

接下来讲一讲Vue的数据代理

首先讲一下原生js的数据代理 原生的 Object.defineProperty() let aa wewewlet person {name: "王李斌",age: 12} Object.defineProperty(person, "address", {// value: 14&#xff0c; 给字段设置值//enumerable:true, 设置动态设置的字段为可以遍历/…

Docker 镜像解密:分层存储与构建原理多角度解析

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

超声波水表的优势

超声波水表是一种新型的水表&#xff0c;它采用超声波测流技术&#xff0c;能够实现对水流的非接触式测量&#xff0c;具有许多优势。下面将从多个方面来介绍超声波水表的优势。 一、高精度 由于超声波测流技术采用的是非接触式测量&#xff0c;因此不会受到水流的摩擦、涡流等…

【C++】C++11 (3): lambda表达式和包装器

一、lambda表达式 C98中的一个例子 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。 #include <algorithm> #include <functional> int main() {int a[] { 4,1,8,5,3,7,0,9,2,6 };// 默认按照小于比较&#xff…

S32 Design Studio for ARM(S32DS)下载和安装

1. S32 Design Studio for ARM 介绍 S32 Design Studio for ARM&#xff08;下面简称S32DS&#xff09;&#xff0c;是 NXP 官方在 2014 年官方推出的&#xff0c;专门面向 S32K、KEA、MAC57D54H等系列微控制器的集成开发环境。 S32DS是由Eclipse和一些插件集成而来的开发平台…

自来水收费系统适合应用于哪些场景?

自来水收费系统是一种用于自来水公司或供水管理部门的软件系统&#xff0c;旨在帮助自动化自来水的收费和管理过程。该系统可以帮助自来水公司更好地管理水资源&#xff0c;提高供水质量和效率&#xff0c;同时也可以为用户提供更加便捷和安全的用水服务。下面将从多个方面来介…

centos7通过epel源安装redis

目录 一、下载epel源 二、下载并且启动 一、下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 二、下载并且启动 yum install redis systemctl enable --now redis

c代码和c++代码互相调用

note 不管是c代码调用c代码&#xff0c;还是c代码调用c代码&#xff0c;本质上都是g兼容gcc的功能 c代码调用c代码 lib.h #ifndef _LIB_H_void libfun(void);#endif lib.c #include <stdio.h> #include "lib.h"void libfun(void) {printf("this is i…