首页 > 其他分享 >线程池介绍、参数、执行过程

线程池介绍、参数、执行过程

时间:2024-09-12 23:51:55浏览次数:11  
标签:队列 创建 任务 参数 线程 执行 空闲

线程池

管理一系列线程的资源池,提供了一种限制和管理线程资源的方式

线程池一般用于执行多个不相关联的耗时任务,没有多线程的情况下,任务顺序执行,使用了线程池的话可让多个不相关联的任务同时执行

好处

降低资源消耗:频繁的线程创建和销毁会消耗系统资源,线程池可以复用已经创建的线程池。

提高响应速度:当任务到达后,可以不需要等待线程创建立即执行。

提高线程的可管理性:线程池支持定时执行、周期性执行、单线程执行和并发数控制等功能。

组成

线程池管理器:用于创建并管理线程池

工作线程:线程池中的线程

任务接口:每个任务必须实现的接口,用于工作线程调度其运行通过Executor框架实现的。

核心参数

corePoolSize:核心线程数,最大可以同时运行的线程数量,即使处于空闲状态,不会被回收。

maximumPoolSize:最大线程数,工作队列满了后创建新线程来处理任务,直到线程数到达这个最大值。

keepAliveTime:线程空闲时间,超过该时间的非核心线程将会被销毁

unit:空闲时间单位

workQueue:等待队列(任务队列,堵塞队列),当前运行线程达到核心线程数就会进入等待队列中。

threadFactory:线程工厂。可以用来给线程取名字。

handler:饱和拒绝策略,定义了当线程池和工作队列都满了之后对新提交的任务的处理策略。常见的拒绝策略包括抛出异常、直接丢弃、丢弃队列中最老的任务、由提交任务的线程来直接执行任务

创建方式

  • 通过ThreadPoolExecuter构造函数来创建(推荐)

  • 通过Executor框架的工具类Executors来创建

线程池执行过程

开始提交任务后先判断线程池是否运行,没有的话拒绝任务,正在运行的话就判断线程数是否小于核心线程数,是,(创建线程,or空闲线程)就添加到工作线程中执行。否就判断阻塞队列是否已满,否的话添加任务到阻塞队列中等待工作线程获取执行。是的话再判断线程数是否小于最大线程数,是,(创建线程)就添加到工作队列并执行,否则采取拒绝策略

标签:队列,创建,任务,参数,线程,执行,空闲
From: https://blog.csdn.net/qq_62097431/article/details/142188344

相关文章

  • pyqt、pyside界面关闭后自动保存已设置参数
    超简单、低耦合!pyqt、pyside界面关闭后自动保存已设置参数文章目录超简单、低耦合!pyqt、pyside界面关闭后自动保存已设置参数前言正文初始思路实现思路1.`getattr()`:用于返回一个对象的属性值。2.`findChildren()`:获得满足条件的所有子对象代码实现`restore_scr......
  • 第十八讲:为什么我只查一行的语句,也执行这么慢?
    第十八讲:为什么我只查一行的语句,也执行这么慢?引入​ 一般情况下,如果我跟你说查询性能优化,你首先会想到一些复杂的语句,想到查询需要返回大量的数据。​ 但有些情况下,“查一行”,也会执行得特别慢。今天,我就跟你聊聊这个有趣的话题,看看什么情况下,会出现这个现象。需要说明的是,如......
  • day11-多线程
    一、线程安全问题线程安全问题出现的原因?存在多个线程在同时执行同时访问一个共享资源存在修改该共享资源线程安全:多个线程同时修改同一个资源取钱案例小明和小红是一对夫妻,他们有一个共同的账户,余额是10万元如果小明和小红同时来取钱,并且2人各自......
  • 机器线程数量突然激增的原因是什么?
    机器上的线程数量突然激增可能由多种原因引起。以下是一些常见的原因及其可能的解决方法:1.应用程序或进程问题某个应用程序或进程可能创建了大量线程,这通常是由于编程错误、资源泄漏或不当的线程管理引起的。解决方法:使用系统监控工具(如任务管理器、top、htop)查看哪个......
  • C++读取命令行参数的学习(BOOST库)
    在c++工程中,经常需要通过命令行参数来获取程序运行所需要的信息。作者在实际工作中学习了Boost库,这里根据作者的理解,写了一个依托boost库完成命令行参数提取的程序模版,请大佬批评!!#defineOK0#defineExit-99//主程序#include<iostream>#include"XApp.h"intmain(int......
  • UNO 已知问题 在后台线程触发 SKXamlCanvas 的 Invalidate 且在 PaintSurface 事件抛
    本文记录一个UNO已知问题,在UNO里面可以利用SKXamlCanvas对接Skia绘制到应用里面。如果此时在后台线程里面调用SKXamlCanvas的Invalidate触发界面的重新刷新,但在具体的执行绘制PaintSurface事件里面对外抛出异常,将会导致应用炸掉背景:我准备在UNO里面将Microsoft......
  • 某智能网关 list_service_manage存在命令执行漏洞
    漏洞描述瑞斯康达多业务智能网关list_service_manage.php存在未授权命令注入漏洞,攻击者利用可获取服务器权限。资产信息FOFA:body="/images/raisecom/back.gif"漏洞复现pocPOST/vpn/list_service_manage.php?template=%60whoami%3E%2Fwww%2Ftmp%2F1.txt%60HTTP/1.1H......
  • 线程---实践与技巧(C语言)
            目录一、引言二、线程基础  1.线程概念  2.线程库三、线程的创建与终止  1.创建线程  2.终止线程四、线程同步与互斥  1.互斥锁(Mutex)  2.条件变量(ConditionVariable)五、线程间的通信六、总结               ......
  • Ubuntu/麒麟系统下使用wine运行windows可执行程序
    一、确认程序位置确保你知道要运行的Windows程序的安装文件或可执行文件的位置。如果程序已经安装在Windows系统中,并且你想在麒麟V10Sp1系统下通过Wine运行它,需要将该程序的安装目录或可执行文件复制到麒麟系统中,或者确保可以通过网络共享等方式访问到它。二、打开终......
  • tomcat线程池满了会影响redis请求吗
    Tomcat线程池满了会影响处理新来的HTTP请求,但通常不会直接影响Redis的请求,因为这两者在系统架构中是分离的组件。以下是相关的解释:Tomcat线程池Tomcat服务器使用线程池来处理并发到达的HTTP请求。每个请求都会消耗线程池中的一个线程。如果线程池达到其最大容量,新到达的请求可能会......