线程池的基础使用和执行策略

什么是线程池

线程池,字面意思就是一个创建线程的池子,它的特点就是,在使用线程之前,就一次性把多个线程创建好,放到"池”当中。后面需要执行任务的时候,直接从"线程池"当中通过线程执行。当线程执行完毕之后,也不是直接销毁线程,而是把线程重新放回到"池子“当中,等需要再次执行任务的时候,就再次从池子当中获取线程,执行任务。

如图

线程池常用接口和类

Executor: 线程池顶级接口

ExecutorService:线程池接口,可通过submit(Runnable task)提交任务,用来定义线程池的实现规范的接口(同时继承于Executor接口)

 

Executors工具类:通过此类可以获得一个线程池,并且里面有配置好的线程池可供选择

通过工具类可以创建四种常用线程池

  ExecutorService executorService = Executors.newCachedThreadPool();ExecutorService executorService1 = Executors.newFixedThreadPool(10);ExecutorService executorService2 = Executors.newSingleThreadExecutor();ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);

newCachedThreadPool():没有核心线程数,创建一个动态的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果没有可用的线程,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。

newFixedThreadPool(10):创建固定数目线程的线程池,参数即使核心线程池数也是最大线程池数量

newSingleThreadExecutor():创建一个单线程化的Executor,核心线程数与最大线程数都为1

Executors.newScheduledThreadPool():能够进行任务调度的线程池

线程池的执行流程

首先当线程池空闲时,会进行以下步骤进行操作

  1. 提交任务:当有人需要执行任务时,通过`execute()`或`submit()`方法提交任务到线程池,线程池会将任务放入任务队列中,等待线程来执行
  2. 然后选择线程执行任务:线程池会从任务队列中选择一个任务,然后从线程池中选择一个空闲的线程来执行任务。
  3. 再执行任务:选中线程开始执行任务。线程执行任务期间,会不断从任务队列中获取任务并执行,直到任务队列为空或线程池被关闭

 

当线程池中不存在空闲线程时

  1. 如果没有空闲线程,则去判断核心线程池是否已满,如果没有则创建核心线程执行任务
  2. 否则则去进入工作队列进行等待,如果有线程空闲则立刻分配
  3. 当工作队列也满时,会去线程池里创建普通线程去执行任务
  4. 当普通线程池也满时,证明当前线程池已经不能再进行任务的执行了
  5. 这个时候就会执行拒绝策略

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

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

相关文章

灌水:powershell 练习正则表达式

亲爱的读者们&#xff0c;请展示你们的能力&#xff1a;解析&#xff08;使用代码&#xff09;解析以下字符串 <鱼龙混杂的奇葩文件#> UI1|System.Windows.Forms.linklabel #创建用户对象 1.location.250.250 1.text.磁盘清理 1.autosize #自适应大小 #存在混淆风险…

如何用GPT高效地处理文本、文献查阅、PPT编辑、编程、绘图和论文写作?

原文链接&#xff1a;如何用GPT高效地处理文本、文献查阅、PPT编辑、编程、绘图和论文写作?https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247594986&idx4&sn970f9ba75998f2dd9fa5707d1611a6cc&chksmfa82320dcdf5bb1bdf58c20686d4eb209770e68253ed90d…

外汇天眼:Spuerkeess选择Euroclear FundsPlace作为其基金业务的首选合作伙伴

卢森堡国家储蓄银行&#xff08;Spuerkeess&#xff09;宣布将把其大部分基金组合移至Euroclear FundsPlace&#xff0c;作为其简化基金业务的努力的一部分。这家卢森堡银行决定摆脱转移代理&#xff0c;并将其基金的分销和执行服务集中化。从现在开始&#xff0c;Euroclear的基…

Java工厂模式详解 - 打造高效可扩展的软件架构

Java工厂模式详解 - 打造高效可扩展的软件架构 引言 在软件开发的世界里&#xff0c;设计模式是帮助开发者解决常见问题的有效工具。工厂模式作为一种创建型设计模式&#xff0c;为创建对象提供了一种抽象化的方式&#xff0c;从而减少了代码之间的耦合度&#xff0c;提高了系…

React18源码: reconciler执行流程

reconciler执行流程 1 &#xff09;概述 此处先归纳一下react-reconciler包的主要作用&#xff0c;将主要功能分为4个方面&#xff1a; 输入&#xff1a;暴露api函数&#xff08;如&#xff1a;scheduleUpdateOnFiber&#xff09;, 供给其他包&#xff08;如react包&#xff0…

sentinel中监听器的运用--规则管理

sentinel中监听器的运用–规则管理 规则结构 类图关系 类关系图如下 Rule 将规则抽象成一个类, 规则与资源是紧密关联的, 也就是说规则作用于资源。因此, 我们需要将规则表示为一个类, 并包含一个获取资源的方法 这里采用接口的原因就是规则是一个抽象概念而非具体实现。…

Web3 基金会推出去中心化之声计划:投入高额 DOT 和 KSM ,助力去中心化治理

作者&#xff1a;Web3 Foundation Team 编译&#xff1a;OneBlock 原文&#xff1a;https://medium.com/web3foundation/decentralized-voices-program-93623c27ae43 Web3 基金会为 Polkadot 和 Kusama 创建了去中心化之声计划&#xff08;Decentralized Voices Program&…

云图极速版限时免费活动

产品介绍 云图极速版是针对拥有攻击面管理需求的用户打造的 SaaS 应用&#xff0c;致力于协助用户发现并管理互联网资产攻击面。 实战数据 (2023.11.6 - 2024.2.23) 云图极速版上线 3 个月以来&#xff0c;接入用户 3,563 家&#xff0c;扫描主体 19,961 个&#xff0c;累计发…

洛谷P4995 跳跳!

跳跳&#xff01; 题目描述 你是一只小跳蛙&#xff0c;你特别擅长在各种地方跳来跳去。 这一天&#xff0c;你和朋友小 F 一起出去玩耍的时候&#xff0c;遇到了一堆高矮不同的石头&#xff0c;其中第 i i i 块的石头高度为 h i h_i hi​&#xff0c;地面的高度是 h 0 …

SQL注入:网鼎杯2018-unfinish

目录 使用dirmap扫描 使用dirsearch扫描 使用acunetix扫描 爆破后端过滤的字符 绕过限制获取数据 这次的进行SQL注入的靶机是&#xff1a;BUUCTF在线评测 进入到主页面后发现是可以进行登录的&#xff0c;那么我们作为一个安全人员&#xff0c;那肯定不会按照常规的方式来…

js 文件预览 在窗口设置“自定义名称”

1. 最近需要做一个点击表格某一列的标题&#xff0c;预览当前文件的一个小功能。本身功能很简单&#xff0c;点击该标题&#xff0c;预览文件&#xff0c;那么拿到他对应的文件地址&#xff0c;在浏览器打开就行了。 2. 事实如此&#xff0c;使用window.open(url, _blank);就行…

【QT-lineEidte动画效果

QT-lineEidte动画效果 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #ifndef DynamicUnderlineLineEdit_H #define DynamicUnderlineLineEdit_H#include <QWidget> #include <QLineEdit> #include <QPainter> #include <QPaintEvent…

HTML5新婚、年会、各种聚会的现场抽奖活动(附源码)

文章目录 1.抽奖平台设计来源1.1 主界面效果1.2 抽奖效果1.3 中奖效果 2.效果和源码配置2.1 动态效果2.2 人员信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/deta…

最长公共前缀【简单】

题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例如下&#xff1a; 所给提示如下&#xff1a; 1 < strs.length < 2000 < strs[i].length < 200strs[i] 仅由小写英文字母组成 解题 根据…

使用 C++23 协程实现第一个 co_await 同步风格调用接口--Qt计算文件哈希值

C加入了协程 coroutine的特性&#xff0c;一直没有动手实现过。看了网上很多文章&#xff0c;已经了解了协程作为“可被中断和恢复的函数”的一系列特点。在学习过程中&#xff0c;我发现大多数网上的例子&#xff0c;要不就是在main()函数的控制台程序里演示yeild,await, resu…

集合是干嘛的?解决了什么问题?

通常并不能确切地知道最终需要多少个对象。有些时候甚至想用更复杂的方式来保存对象。为解决这个问题&#xff0c;Java 提供了四种类型的“集合类”&#xff1a;Vector&#xff08;矢量&#xff09;、BitSet&#xff08;位集&#xff09;、Stack&#xff08;堆栈&#xff09;以…

【动态规划专栏】背包问题:01背包

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

个人博客系列-前端部署-创建框架(4)

项目环境介绍 Vue3 Vite TypeScript 服务器&#xff1a;阿里云contos node版本&#xff1a;v18.18.2 npm版本&#xff1a;v10.2.4 执行下面一行命令&#xff0c;创建vue3框架 npm create vuelatest修改端口&#xff1a;9528&#xff0c; 此步骤可以忽略&#xff08;使用默…

Chrome Captcha自动解决器,如何下载CapSolver

在数字时代&#xff0c;CAPTCHA&#xff08;Completely Automated Public Turing tests to tell Computers and Humans Apart&#xff0c;完全自动区分计算机和人类的公共图灵测试&#xff09;作为一项重要的安全措施&#xff0c;用于保护网站免受自动机器人的攻击。然而&#…

儿子刚上初一就很叛逆怎么办?家长们可以试试这样教育!

初一正处于青春期&#xff0c;叛逆是很正常的一种成长现象&#xff0c;这个时候的他们是控制不好自己情绪的&#xff0c;和家长对着干几乎成为了一种本能&#xff0c;他们总会觉得自己爸爸妈妈这不对那不对这不懂那也不懂&#xff0c;所以极其叛逆。 针对初中生&#xff0c;主…