线程池工作过程

线程池工作流程

    • 线程池的处理流程
    • 总结

线程池的处理流程

当提交一个新任务到线程池时,线程池的处理流程如下:

1、线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。

2、线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。

3、线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。

如下图:
![[Pasted image 20231230212815.png]]

Java中线程池的类是ThreadPoolExecutor,里面执行的方法是execute方法,主要的execute的执行流程如下:
![[Pasted image 20231230212928.png]]


总结

上述两张图描述的都是一个流程,简洁总结一下就是:

  1. 添加任务,首先会判断核心线程池是否已满(假设设置的核心线程数为n个,编译器不会一次性 new n 个线程出来,而是根据任务量来创建)

    • 如果不满,则创建一个 “核心” 线程来执行任务(此操作需要获取全局锁)
    • 如果满了,则将任务添加进阻塞队列 BlockingQueue
  2. 将任务添加进阻塞队列 BlockingQueue 中后,会判断该队列是否已满

    • 如果不满,则添加进队列中,等待核心线程来取任务,然后执行任务
    • 如果满了,则创建新的线程(这种线程称为 “工作线程”,不能大于 maximumPoolSize )来执行任务(此操作需要获取全局锁)
  3. 如果 BlockingQueue 已满,且线程数已经到达 maximumPoolSize ,此时提交进来的任务会根据拒绝策略来变动

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

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

相关文章

fgets的使用方法详解

fgets的使用 文章目录 fgets的使用前言(吹水,不看也罢)fgets 的基本语法使用示例fgets() 对输入的处理的特点gets() 与 fgets() 的主要区别 总结 前言(吹水,不看也罢) 鼠鼠今天在B站上大学的时候&#xff…

基于单片机的智能交通控制系统研究

摘 要:随着汽车保有量不断增加,对交通提出新的要求和挑战,针对愈发拥挤的交通、有限的资源和环境的压力,需积极消 除依附原有滞后方法满足交通需求,选用合理、高效的交通控制手段,优化和改善交通控制运行现状,是当下控制的重点内 容。结合交通实际需求,以单片机为核心基…

天翼云盘 误封解决 部分任务下载异常 违反信安规则

背景 从网上下载别人分享的文件,部分下载不了,提示部分任务下载异常,反复点重试在之前不成功的之中又成功了几个,然后就再也成功不了了,点进去发现提示违反信安规则。 原因 天翼云盘大概是有些信安规则,…

Vue2:组件间通信框架Vuex

一、原理图及作用 功能介绍: 简单说就是Vue项目中,各个组件间通信的一种框架 相较于之前的全局事件总线,该框架更实用! 提高了代码的复用率,把核心业务代码,集中到store中,这样,一处…

python——多线程的共享变量用法

文章目录 多线程共享变量锁(Locks)示例事件(Events)示例条件变量(Condition Variables)示例队列(Queues)示例阻塞传输数据非阻塞传输数据 多线程共享变量 在Python中,如…

掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验

原生智能是HarmonyOS NEXT的核心亮点之一,依托HarmonyOS SDK丰富全面的开放能力,开发者只需通过几行代码,即可快速实现AI功能。新浪新闻作为鸿蒙原生应用开发的先行者之一,从有声资讯入手,将基于Speech Kit朗读控件上线…

第98讲:MHA高可用集群VIP地址配置与漂移实践

文章目录 1.为甚要给MHA高可用集群配置VIP地址2.配置MHA高可用集群VIP漂移地址2.1.准备MHA VIP地址的脚本2.2.配置MHA指定VIP地址的脚本2.3.手动在主库上配置VIP地址2.4.重启MHA2.5.模拟主库故障观察VIP是否会自动切换 1.为甚要给MHA高可用集群配置VIP地址 当主库发生故障&…

从kafka如何保证数据一致性看通常数据一致性设计

一、前言 在数据库系统中有个概念叫事务,事务的作用是为了保证数据的一致性,意思是要么数据成功,要么数据失败,不存在数据操作了一半的情况,这就是数据的一致性。在很多系统或者组件中,很多场景都需要保证…

【前端工程化面试题目】说说你对 SSG 的理解

注意 ssg 和 ssr 是不同的,具体请参考这篇文章。 SSG 是静态站点生成器(Static Site Generator)的缩写,它是一种用于构建静态网站的工具或框架。静态站点生成器将一组源文件(通常是 Markdown、HTML、CSS、JavaScript 等…

计算机网络——18无连接传输UDP

无连接传输UDP UDP “尽力而为的”服务,报文段可能 丢失送到应用进程的报文段乱序 无连接 UDP发送端和接收端之间没有握手每个UDP报文段都被独立的处理 UDP被用于 流媒体DNSSNMP 在UDP上实现可靠传输 在应用层增加可靠性应用特定的差错格式 UDP:用户…

Positive SSL 证书介绍

Positive SSL 是一种受欢迎的 SSL 证书,提供了卓越的安全性、性价比和品牌信任。以下是对 Positive SSL 在这些方面的简要介绍: 1. 安全性: Positive SSL 证书采用强大的加密技术,确保网站和用户之间的数据传输是安全的。它使用…

turn服务器debug

turn服务器正常能连通的调用堆栈 turn_port.cc AddRequestAuthInfo check 崩溃 有问题的turn msg type是259 request type 是3 用不了的turn 服务器turnmessage type 275

Mybatis源码分析

Mybatis源码分析 第一章、回顾 1. 课程中工具的版本 1. JDK8 2. IDEA2018.3 3. Maven3.5.3 4. MySQL 5.1.48 --> MySQL 5Mybatis 3.4.62. Mybatis开发的简单回顾 1. Mybatis做什么?Mybatis是一个ORM类型框架,解决的数据库访问和操作的问题&#xf…

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之OS模块配置详解(中)

OS模块配置详解 - 中 一、OS模块配置实操1.1 打开OS Configuration1.2 创建OS Cores1.3 添加系统定时器1.4 添加一个Os Application1.5 添加几个Task1.5.1 添加Init Task1.5.2 添加BSW Task1.5.3 添加APP Task二、中断分布调整与设置中断号2.1 调整中断分布2.2 正确设置中断号2…

OpenCV介绍和使用

一:简介 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,广泛应用于图像处理、计算机视觉、机器学习等领域。它包含了大量的函数和工具,可以用于图像读取、显示、处理、特征提取、目标检测等任务。 OpenCV最初是由Intel公司开发的…

Github:分享一款开源的跨平台多功能远程控制和监控工具Spark

目录 1、设备列表及操作列表 2、登录机器 Shell 执行命令 3、桌面远程访问 4、远程设备的进程管理 5、远程设备文件管理 今天要给大家推荐一个开源的跨平台多功能远程控制和监控工具:Spark。 目前该项目处于不维护状态,大家可以自己根据需要进行扩…

代码随想录 Leetcode763. 划分字母区间

题目&#xff1a; 代码(首刷看解析 2024年2月18日&#xff09;&#xff1a; class Solution { public:vector<int> partitionLabels(string s) {int hash[27] {0};for (int i 0; i < s.size(); i) {hash[s[i] - a] i;}vector<int> res;int left 0;int righ…

PyTorch使用Tricks:学习率衰减 !!

文章目录 前言 1、指数衰减 2、固定步长衰减 3、多步长衰减 4、余弦退火衰减 5、自适应学习率衰减 6、自定义函数实现学习率调整&#xff1a;不同层不同的学习率 前言 在训练神经网络时&#xff0c;如果学习率过大&#xff0c;优化算法可能会在最优解附近震荡而无法收敛&#x…

【开源】SpringBoot框架开发智能教学资源库系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程档案表3.2.2 课程资源表3.2.3 课程作业表3.2.4 课程评价表 四、系统展示五、核心代…

超级楼梯(动态规划)

#include <iostream> using namespace std; int main (){int n;cin >> n;int f[41];f[1] 0;f[2] 1;f[3] 2;for (int i 4;i < 42;i){f[i] f[i-1] f[i-2];}while (n--){int stair;cin>> stair;cout << f[stair]<<endl;}return 0; }