当前位置: 首页 > news >正文

线程池的原理和基本使用~

线程池的基本原理:

无论是之前在JavaSE基础中,我们学习过的常量池,还是在操作数据库时,我们学习过数据库连接池,以及接下来要学习的线程池,均是一种池化思想,其目的就是为了提高资源的利用率,线程池顾名思义就是对线程对象的一种优化,如果不使用线程池,那么我们对线程的操作即为手动创建线程对象执行任务任务执行完毕释放线程对象,映射到我们生活为我们每次打电话都需要买一个手机,每次打完电话就将手机扔掉,那么这样一来,无疑是非常的铺张浪费,而线程池就类似于将手机重复利用而不是每次都换新的,它能很好地提高资源的利用率并且由于线程对象是提前创建好的,因此也能够提高程序的响应速度

下面我使用日常生活中最常见的一个例子来说明线程池的原理

我们可以将海底捞作为一个线程池,那么海底捞中的桌子可以看作是线程对象,假设当前店中已经有3张空闲的桌子可以使用,此时来了4组可以需要吃饭,那么服务员会根据先后顺序先安排前3组客人进行就餐,剩下的一组客人需要进入等待区,随后来的客人都会进入等待区,但是等待区的位置也不是无穷无尽的啊,假设我们的等待区只能最多让2个用户进行等待,当前如果又来了一个客人,那么就会出现他们既没有空闲的餐桌供他们使用,等待区也没有空闲的位置,那么此时由于客人并发量太大了,海底捞的老板就会触发一种应急方案,就是在当前餐厅空旷的区域加桌子,那么等待区中的第一位客人就可以从等待区中出来了呀,刚刚没有办法处理的客人此时就可以加入等待区中,加桌子是挺好的,但是也不能无限加啊,因为餐厅可使用的地方是有限的,当达到最大值后,又来了一位客人,那么服务员只好拒绝接待该客人!

使用Java简单模拟实现线程池:

package org.example;import java.util.concurrent.*;public class Main {public static void main(String[] args) {//3-->表示核心的线程对象数量,也就是上述海底捞例子中没加桌子前的餐厅桌子数量//5-->表示最大线程对象的数量,也就是上述海底捞例子中该餐厅最多可容纳的桌子数量//1和后面的TimeUnit.SECONDS表示1秒钟没有任务,就可以停止工作了//ArrayBlockingQueue-->表示一个等待队列//defaultThreadFactory-->调用默认的工厂//AbortPolicy拒绝策略//ExecutorService是Java提供的线程池ExecutorService executorService=new ThreadPoolExecutor(3,5,1L, TimeUnit.SECONDS,new ArrayBlockingQueue<>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());for (int i=0;i<9;i++){executorService.execute(()->{System.out.println(Thread.currentThread().getName()+"办理业务");});}executorService.shutdown();}
}

输出如下所示:

当前线程池最多可容纳线程的数量为8,那么到第九个线程就会触发拒绝策略

pool-1-thread-1办理业务
pool-1-thread-5办理业务
pool-1-thread-4办理业务
pool-1-thread-3办理业务
pool-1-thread-2办理业务
pool-1-thread-4办理业务
pool-1-thread-1办理业务
pool-1-thread-5办理业务
Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task org.example.Main$$Lambda$1/1283928880@682a0b20 rejected from java.util.concurrent.ThreadPoolExecutor@3d075dc0[Running, pool size = 5, active threads = 5, queued tasks = 3, completed tasks = 0]at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)at org.example.Main.main(Main.java:15)

相关文章:

线程池的原理和基本使用~

线程池的基本原理&#xff1a; 无论是之前在JavaSE基础中&#xff0c;我们学习过的常量池&#xff0c;还是在操作数据库时&#xff0c;我们学习过数据库连接池&#xff0c;以及接下来要学习的线程池&#xff0c;均是一种池化思想&#xff0c;其目的就是为了提高资源的利用率&a…...

PyTorch2.0环境搭建

一、安装python并配置环境变量 1、打开python官网&#xff0c;下载并安装 Welcome to Python.org 下载 寻找版本&#xff1a;推荐使用3.9版本&#xff0c;或其他表中显示为安全&#xff08;security&#xff09;的版本 安装&#xff1a;&#xff08;略&#xff09; 2、配置环…...

figma 基础使用 —— 常用方法

一、 导入组件 分成两种方式 &#xff08;1&#xff09;离线的包导入&#xff08;iOS 常用组件.fig 直接拖拽到figma最近网页&#xff09; &#xff08;2&#xff09;在插件市场下载https://www.figma.com/community 二、figma中使用标尺 快捷键&#xff1a;shift R 三、插件…...

linux rsync 和scp区别

rsync 和 scp 都是 Linux 中用于文件复制的命令&#xff0c;但它们之间存在一些关键差异&#xff1a; 效率&#xff1a;rsync 在复制文件时&#xff0c;只会复制文件中改变的部分&#xff0c;而 scp 则会复制整个文件&#xff0c;即使文件只有一小部分发生了变化。因此&#xf…...

mac如何永久设置环境变量

1. 先将默认shell修改为bash mac修改默认shell为bash-CSDN博客 2. 修改环境变量 Mac中的环境变量介绍 Mac系统的环境变量&#xff0c;加载顺序为&#xff1a; /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc 当然/etc/profile和/etc/paths…...

小程序一键生成工具哪个好?

在这个数字化时代&#xff0c;小程序已经成为商家吸引客户、提升业务的重要工具。但是&#xff0c;传统的小程序开发方式既费时又费力&#xff0c;让许多商家望而却步。 现在&#xff0c;有了乔拓云小程序模板开发平台&#xff0c;一切都变了。 乔拓云提供了大量精心设计的模板…...

Ubuntu环境下使用nginx实现强制下载静态资源

安装Nginx sudo apt update sudo apt install nginx关闭防火墙 sudo ufw allow Nginx HTTP修改nginx配置 cd /etc/nginx/conf.d vi nginx.conf在http配置中添加(/your path/为需要下载的文件路径) server {listen 80;server_name localhost;location / {root /your path/…...

苹果 macOS 14.1.2 正式发布 更新了哪些内容?

苹果今日向 Mac 电脑用户推送了 macOS 14.1.2 更新&#xff08;内部版本号&#xff1a;23B92 | 23B2091&#xff09;&#xff0c;本次更新距离上次发布隔了 28 天。 需要注意的是&#xff0c;因苹果各区域节点服务器配置缓存问题&#xff0c;可能有些地方探测到升级更新的时间略…...

【网络编程】-- 02 端口、通信协议

网络编程 3 端口 端口表示计算机上的一个程序的进程 不同的进程有不同的端口号&#xff01;用来区分不同的软件进程 被规定总共0~65535 TCP,UDP&#xff1a;65535 * 2 在同一协议下&#xff0c;端口号不可以冲突占用 端口分类&#xff1a; 公有端口&#xff1a;0~1023 HT…...

数字发射链路噪声系数核算方法、实例与matlab程序

前言 发射链路各器件噪声性能较差会影响发射信号信噪比&#xff0c;从而导致较高的误码率&#xff0c;通过定量的分析发射链路噪声系数与信噪比恶化的关系&#xff0c;能够在设计过程中进行合理的评估和处理。 一、发射链路噪声 发射链路的噪声从特性上可以大致分为&#xff1…...

SQL数据库知识点总结归纳

前后顺序可以任意颠倒,不影响库中的数据关系 关系数据库的逻辑性强而物理性弱,因此关系数据库中的各条记录前后顺序可以任意颠倒,不影响库中的数据关系 一名员工可以使用多台计算机(1:m),而一台计算机只能被一名员工使用(1:1),所以员工和计算机两个实体之间是一对多…...

Linux C语言 39-进程间通信IPC之管道

Linux C语言 39-进程间通信IPC之管道 本节关键字&#xff1a;C语言 进程间通信 管道 FIFO 相关库函数&#xff1a;pipe、mkfifo、mknod、write、read 什么是管道&#xff1f; 管道通常指“无名管道”&#xff0c;是Unix系统中最古老的IPC通信方式。 管道的分类 管道&#…...

python pandas dataframe常用数据处理总结

最近一直在做数据处理相关的工作&#xff0c;有几点经常遇到的情况总结如下&#xff1a; 数据中存在为空数据如何处理 处理方式1&#xff1a;丢弃数据行 # 实现方式1 data data.dropna(subset[id]) # 若id列中某行数值为空&#xff0c;丢弃整行数据 # 实现方式2 data df[df…...

excel做预测的方法集合

一. LINEST函数 首先&#xff0c;一元线性回归的方程&#xff1a; y a bx 相应的&#xff0c;多元线性回归方程式&#xff1a; y a b1x1 b2x2 … bnxn 这里&#xff1a; y - 因变量即预测值x - 自变量a - 截距b - 斜率 LINEST的可以返回回归方程的 截距(a) 和 斜…...

12月8日作业

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff1b;将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;…...

RefCell 数据类型

内部可变性&#xff08;interior mutability&#xff09;是RUST的设计模式之一&#xff0c;它允许你在只持有不可变引用的前提下对数据进行修改。为了能改变数据&#xff0c;内部可变性模式在它的数据结构中使用了unsafe&#xff08;不安全&#xff09;代码来绕过RUST正常的可变…...

[oeasy]python0002_终端_CLI_GUI_编程环境_游戏_真实_元宇宙

回忆 上次 了解了 python 语言的特点 历史悠久功能强大深受好评已成趋势 3大主流操作系统 macwindowslinux 我们 选择 linux 作为基础系统 为什么选择 黑乎乎的命令行界面呢&#xff1f;&#x1f914; GUI vs CLI 个人电脑 用图标和菜单组成 图形界面(GUI) Graphic User I…...

微服务1 springcloud学习笔记P1-P40

b微服务技术栈_哔哩哔哩_bilibili 文档资料: 链接&#xff1a;https://pan.baidu.com/s/1P_Ag1BYiPaF52EI19A0YRw?pwdd03r 提取码&#xff1a;d03r 一 了解微服务技术 二 Eureka (1) Eureka配置 (2) 注册user-service (3) 总结 Ribbon 负载均衡 (1) 流程 三 nacos配置管理…...

【页面】表格展示

展示 Dom <template><div class"srch-result-container"><!--左侧--><div class"left"><div v-for"(item,index) in muneList" :key"index" :class"(muneIndexitem.mm)?active:"click"pa…...

天池SQL训练营(六)-综合练习题-10道经典题目

如果你还没有学习过SQL训练营的以下知识&#xff0c;请查阅主页博文学习&#xff1a; Task 1 SQL基础&#xff1a;初识数据库与SQL-安装与基本介绍等 Task 2 SQL基础&#xff1a;查询与排序-select、运算符、聚合分组查询等 Task 3 SQL进阶&#xff1a;复杂查询方法-视图、子查…...

BES平台音频算法集成避坑指南:从声加ENC案例看副核调度与内存优化

BES平台音频算法深度优化&#xff1a;从ENC案例剖析多核调度与内存管理 在蓝牙音频芯片领域&#xff0c;BES平台凭借其出色的能效比和灵活的架构设计&#xff0c;已成为众多高端TWS耳机厂商的首选方案。然而&#xff0c;当工程师们尝试将ENC&#xff08;环境噪声消除&#xff0…...

常见 PE 启动盘

文章目录常见 PE 启动盘一、强烈推荐 纯净无捆绑类二、功能强大 可选推广类三、老牌经典 捆绑较多类四、官方原版常见 PE 启动盘 这里整理了一份常见的PE启动盘大全&#xff0c;按纯净度和口碑分类&#xff0c;并附上官网或可靠的下载渠道。 一、强烈推荐 纯净无捆绑类 这…...

Halbot框架解析:从零构建可扩展聊天机器人的实践指南

1. 项目概述&#xff1a;一个轻量级、可扩展的聊天机器人框架最近在折腾一个需要集成多个聊天平台&#xff08;比如微信、钉钉、Telegram&#xff09;的自动化项目&#xff0c;发现市面上现成的机器人框架要么太重&#xff0c;要么扩展性不够&#xff0c;要么就是文档写得云里雾…...

ARM GICv3虚拟中断控制器架构与ICV_CTLR_EL1寄存器解析

1. ARM GICv3虚拟中断控制器架构概述在ARMv8-A架构的虚拟化环境中&#xff0c;GICv3中断控制器通过引入虚拟CPU接口寄存器组&#xff0c;为虚拟机提供了与原生物理中断处理机制高度一致的虚拟中断体验。这套虚拟寄存器组与物理寄存器组采用相同的编程模型&#xff0c;但在访问控…...

大一学生揭秘科罗拉多矿业学院扫描技术:掌控投影仪和摄像头,问题待修复

大一学生掌控科罗拉多矿业学院投影仪和摄像头&#xff0c;扫描技术揭秘与问题修复情况曝光在科罗拉多矿业学院开启大一生活时&#xff0c;我发现当地 DNS 服务器会为每个连网设备分配子域名&#xff0c;如 “meow” 设备在校园无线网络显示为 “meow.mines.edu”&#xff0c;但…...

不只是调色板:深入Cadence Allegro颜色配置文件的保存与复用逻辑(SPB17.4实战)

不只是调色板&#xff1a;深入Cadence Allegro颜色配置文件的保存与复用逻辑&#xff08;SPB17.4实战&#xff09; 在PCB设计领域&#xff0c;颜色配置往往被视为一种"视觉装饰"——直到某天你接手一个来自同事的工程文件&#xff0c;发现所有网络、层叠和元件都以难…...

免费跨平台绘图神器:draw.io桌面版终极使用指南

免费跨平台绘图神器&#xff1a;draw.io桌面版终极使用指南 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 还在为不同系统间的图表文件兼容性而烦恼吗&#xff1f;&#x1f91…...

NotebookLM智能体插件开发:连接AI笔记与外部工具的实现指南

1. 项目概述&#xff1a;当AI笔记助手学会“动手”最近在折腾AI应用开发的朋友&#xff0c;可能都注意到了GitHub上一个挺有意思的项目&#xff1a;amp-rh/notebooklm-agent-plugin。乍一看名字&#xff0c;它像是Google那个实验性AI笔记工具NotebookLM的一个插件。但如果你深入…...

KV缓存优化与RAG系统性能提升实践

1. KV缓存技术原理与RAG系统挑战 在大型语言模型(LLM)推理过程中&#xff0c;KV&#xff08;Key-Value&#xff09;缓存技术通过存储注意力机制计算产生的中间状态来避免重复计算。具体来说&#xff0c;Transformer架构中的每个解码器层都会为输入序列生成键(Key)和值(Value)矩…...

MobaXterm远程桌面实战:在Ubuntu上配置与连接RDP服务

1. 为什么选择MobaXterm连接Ubuntu远程桌面 作为一名常年和Linux服务器打交道的开发者&#xff0c;我深知纯命令行操作有时会遇到效率瓶颈。特别是当需要处理图形界面应用或者进行复杂配置时&#xff0c;SSH终端就显得力不从心了。这时候&#xff0c;RDP远程桌面协议就成了救命…...