JAVA:简单易懂记住线程池(一)

深度残差网络的无人机多目标识别 深度残差网络的无人机多目标识别 人工智能技术与咨询 来源:《图学学报》。作者翟进有等 摘要:传统目标识别算法中,经典的区域建议网络(RPN)在提取目标候选区域时计算量大,时间复杂度较高,因此提出一种级联区域建议网络(CRPN)的搜索模式对其进行改善。此外,深层次的卷积神经网络训练中易产生退化现象,而引入残差学习的深度残差网络(ResNet),能够有效抑制该现象。对多种不同深度以及不同参数的网络模型进行研究,将两层残差学习模块与三层残差学习模块结合使用,设计出一种占用内存更小、时间复杂度更低的新型多捷. 阅读详情

1. 什么是线程池?

线程池就像是一个线程管理工厂,它可以:

  • 预先创建一些线程放在"池子"里

  • 当有任务时,复用这些线程,而不是创建新线程

  • 任务完成后,线程不销毁,等待下一个任务

线程池工作流程(生动形象版)

想象一个银行窗口系统:

任务到来时:
1. 先看"正式窗口"(核心线程)有没有空闲 → 有空就用
2. 如果正式窗口都忙,任务去"等待区"(工作队列)排队
3. 如果等待区也满了,呼叫"临时窗口"(创建新线程直到最大线程数)
4. 如果所有窗口都忙,等待区也满了 → 执行"拒绝策略"
5. 忙完后,临时窗口空闲超过指定时间就关闭

2. 为什么要用线程池?

没有线程池的问题:

// 每次任务都创建新线程
new Thread(() -> {
    // 执行任务
}).start();
  • 频繁创建/销毁线程 → 消耗资源

  • 线程数量不可控 → 可能创建过多线程导致系统崩溃

使用线程池的好处:

  • 资源复用:线程可重复使用

  • 控制并发数:避免线程过多

  • 提高响应速度:线程已创建好,无需等待

  • 统一管理:方便监控和调优

3. 线程池核心组件(类比公司)

组件

类比公司部门

作用

corePoolSize(核心线程数)​

正式员工

最少要保持的线程数量

maximumPoolSize(最大线程数)  ​

总编制(正式+临时)

最多可创建的线程数

workQueue(工作队列) ​

待办任务列表

存放等待执行的任务

threadFactory(线程工厂) ​

HR部门

线程工厂,用于创建线程

handler(拒绝策略处理器​)  

拒绝接待

任务太多时的处理方式

keepAliveTime(存活时间)  ​

临时工合同期

非核心线程空闲存活时间

4. 创建线程池的简单方式

4.1 Executors工厂类(快捷方式)

// 1. 固定大小的线程池(正式员工固定)
ExecutorService fixedPool = Executors.newFixedThreadPool(5);

// 2. 单线程线程池(只有1个员工)
ExecutorService singlePool = Executors.newSingleThreadExecutor();

// 3. 可缓存的线程池(忙时招人,闲时裁员)
ExecutorService cachedPool = Executors.newCachedThreadPool();

// 4. 定时任务线程池(做计划任务的)
ScheduledExecutorService scheduledPool = 
    Executors.newScheduledThreadPool(3);

4.2 ThreadPoolExecutor(自定义创建)

ThreadPoolExecutor pool = new ThreadPoolExecutor(
    5,     // 核心线程数:最少5个"正式工"
    10,    // 最大线程数:最多10个员工(5正式+5临时)
    60,    // 临时工空闲60秒后解雇
    TimeUnit.SECONDS,  // 时间单位:秒
    new ArrayBlockingQueue<>(100), // 任务队列:最多存100个任务
    Executors.defaultThreadFactory(), // 线程工厂
    new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);

5. 四种拒绝策略

// 1. 直接抛出异常(默认)
new ThreadPoolExecutor.AbortPolicy();

// 2. 谁提交的任务谁自己执行
new ThreadPoolExecutor.CallerRunsPolicy();

// 3. 丢弃队列中最老的任务
new ThreadPoolExecutor.DiscardOldestPolicy();

// 4. 直接丢弃新任务(静默丢弃)
new ThreadPoolExecutor.DiscardPolicy();

后边会单独写一下不同线程池的使用、工作队列和拒绝策略。


Unity Spine 3.8 (URP) 踩坑(Shader报错修改) 提供了新思路,打算尝试一下URP。但美术使用的spine版本是3.8,项目用的Unity2021.3.11f1c2,直接导入spine URP包,shader报错:half4 不能转成 SurfaceData2D;Spine-Sprite-StandardPass-URP-2D.hlsl 也报这个错,也是同样的改法即可。今天搜索spine优化,看到一篇文章。 阅读详情

相关推荐

告别屏幕适配焦虑:用AndroidAutoSize 1.2.1搞定多尺寸设备(附AndroidX兼容方案)

本文详细介绍了AndroidAutoSize 1.2.1在屏幕适配中的应用,帮助开发者高效解决多尺寸设备适配问题。通过动态计算机制,AutoSize显著提升了UI一致性和开发效率,特别适合处理横竖屏切换、折叠屏等复杂场景。文章还提供了AndroidX兼容方案和性能优化建议,是Android开发者的实用指南。

weixin_42535461的博客 190

Java线程池详解

线程池必须要记住哪几个参数?线程池添加线程有哪些规则?线程池是手动创建还是自动创建好?线程池怎么暂停与恢复?线程池是如何实现线程复用的?本文带你一探究竟!

卓越无关环境,保持空杯心态——靡不有初,鲜克有终 1万+

【高清照片】深圳光博会看PCIe Over Fibre 实现方案

本文分析了PCIe over Fibre技术及其在数据中心的应用前景。该技术通过光纤延伸PCIe总线,解决了传统铜缆距离限制问题,支持跨机架资源池化。目前主要有两种实现方式:CDFP混合光缆方案和Retimer转接卡方案,各有优缺点。文章还探讨了CDFP接口的现状、低速信号传输解决方案,以及PCIe速率与光通信发展的对应关系。最后对比了PCIe光缆与以太网光缆的关键差异,指出PCIe光互连在协议透明度和边带信号处理上的特殊要求。随着标准推进,PCIe over Fibre将成为数据中心扩展高带宽、低时延互连

Saniffer的博客 1393

三十分钟手撕一个线程池(保准记住线程池七大参数)

1. 线程池的概念: ​ 池化是我们在实际生产中经常用到的一种思想,通过一个 “池” 把资源统一的管理起来。可以达到对资源的合理管理、重复利用、减少资源创建/销毁的开销等目的。 ​ 常见的比如常量池、连接池、线程池。 ​ 线程池无非是维护一堆线程阻塞等待任务的到来,并由主线程对任务线程的数量进行动态控制的组件。做到线程资源的复用及统一管理,同时避免大量的线程创建销毁的开销,并控制总的线程数量保证系统安全。 1.1 新建一个线程? 最常用的新建线程的方式 : 得到一个新线程的方式 new Thread(

过道 1656

嵌入式模拟电路面试题大全及参考答案(持续更新)

高输入阻抗:由于晶体管的基极-发射极(BJT)或栅极-源极(MOSFET)电压很低,跨导放大器具有很高的输入阻抗。低输出阻抗:晶体管的集电极-发射极或漏极-源极电阻较低,提供较低的输出阻抗。电压控制:输入信号控制晶体管的跨导,从而控制输出电流。晶体管:作为放大器的核心,可以是BJT或MOSFET。偏置电路:为晶体管提供稳定的工作点,确保其在放大区域内工作。负载电阻:与晶体管的集电极或漏极连接,将电流转换为电压。晶体管的选择:根据所需的增益、速度和功率消耗选择合适的晶体管。偏置稳定性。

大模型大数据攻城狮的专栏 989

小白也能懂!一步步教你用FPGA加速YOLO目标检测(入门篇)

安装到 PYNQ 开发板中。该库为 PYNQ 平台提供了对量化神经网络(如 YOLO)的硬件加速支持。确保你的电脑已连接到外网,如 WiFi 或热点(手机热点理论上也可用,未实测)。当你看到安装成功的提示后,打开 Jupyter Notebook,你会发现在。趁这个机会,泡了杯茶,刷了会儿手机,顺便感慨了一下开源社区的强大……页面中多出了一些新的项目文件夹 —— 这就是我们刚才安装的。参数,浅拷贝只克隆最近一次提交,减少数据量,避免超时问题。初始化,打开该文件,即可运行我们的Tiny YOLO。

FJN110的博客 1598

简单学习一下java线程池的运行原理

首先回顾一下java线程池的架构 1.创建线程池->submit或execute(提交任务) 上篇中说过,其实submit()底层调用的还是execute()。 看源码: java线程池的顶级接口Executor下就一个方法execute();最终实现这个方法的是在ThreadPoolExecutor类中 2.添加任务(addWorker()) 添加任务分四种情况:看源码中,addWor...

凹凸曼的博客 617

1000Base-T1协议解读(基于802.3bq-2016 和Test Suite)

1000Base-T1是由一对双绞线实现全双工传输的以太网标准,采用PAM3编码方式(-1,0,1),编码后的实际传输符号速率为750Mbps。该标准的车载最大传输距离可达15米,主要应用于汽车产品开发过程。测试过程示波器要求带宽≥2G,采样率≥7.5Gbps,网分带宽≥1G。

qflook的博客 5336

Java 线程池简单理解

那当然就是直接return 就行。网上有不少关于线程池的文章 ,我写个简单点的,毕竟再长的文章能真正记住的就是一个模型一个概念,面试过程中能讲到点上就不太可能丢分,

weixin_42531583的博客 181

【STM32系统】基于STM32+手机APP设计的智能停车场系统

功能简介1、进出停车场时需要刷卡,进行一个记时、计费的功能。2、停车位配有超声波检测,主要识别车位是否被占用。3、车位区域配有OLED显示屏,用户可以通过显示屏看到空闲车位。4、车位配有车位灯。当用户找不到车位可以通过手机点亮车位灯5、停车场配有温湿度检测和烟雾检测模块。当环境发生异常状态。会触动紧急报警。6、停车场信息会通过Wi-Fi发送数据上传至阿里云。用户可以通过手机了解到停车场空闲车位和停车时间、费用。

嵌入式阿齐Archie 2万+

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1259

Java 线程池:像管理餐厅一样简单!

线程池不是魔法,而是一种资源调度的艺术。理解它,就像理解如何高效运营一家餐厅——不多招人浪费钱,也不让顾客等太久。掌握这个比喻,下次面试或开发时,你就能轻松说出线程池的精髓!🍀记住:好的程序员,不光写代码,更懂得“省着用”资源。

Talbot3的笔记 675

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 566

如何正确设置Java线程池参数?

如何正确设置Java线程池参数? 前言:在上篇文章我已经给读者介绍了Java线程池的基本使用,以及参数的定义。你真的了解Java线程池参数的含义吗 本文我们更进一步,来聊聊在实际的工作中如何设置Java线程池参数的。 当我们自定义线程池的时候 corePoolSize、maximum...

honger_hua的博客 2925

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

一文带你看懂java线程池

一文带你看懂java线程池总览Executor 接口ExecutorServiceAbstractExecutorServiceThreadPoolExecutorExecutors总结 本文转载至:www.javadoop.com 我相信大家都看过很多的关于线程池的文章,基本上也是面试的时候必问的,如果你在看过很多文章以后,还是一知半解的,那希望这篇文章能让你真正的掌握好 Java 线程池。 ...

zjwl199802的博客 729

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

聊一聊java线程池ThreadPoolExecutor(一)

关于java线程池,大家手写的可能不多,使用的话一般都是直接使用封装好的,具体内部的实现可能只是简单的了解下,一来是方便使用java线程池,当然还有一个更重要的作用,嘿嘿,大家都懂的。 其实理解java中一些源码的运行机制对大家的学习帮助是非常大的,一方面源码中的代码都十分精简,逻辑之间的管理很优雅,另一方面,熟悉源码之后,遇到现实生产中的问题,就很容易去关联到可能出现问题的某个节点,不然真拉出一大堆日志,然后一点点排查重试,特别是并发问题,真的能把人逼的崩溃哈。 今天就来说下线程池,我们由浅入深,一点

zsah2011的博客 336

线程池创建和简单使用

线程池的定义和简单使用

小小葩的博客 822

java JUC 之 四种常用线程池 + Spring提供的线程池技术

目录 一. 线程池的概念 二. 使用线程池的原因 三. JUC常用四种创建线程池方式 四. 常见的四种线程池详解 五. 进一步应用 --> Spring提供的线程池技术ThreadPoolTaskExecutor的使用 六. 感谢大家的阅读! 一. 线程池的概念 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线...

古小龙 1243

Java并发 之 线程池系列 (1) 让多线程不再坑爹的线程池

背景 线程池的来由 什么是线程池 背景总结 用法 通过Executors创建线程池 Executors及其服务的类 Executors常用的几个方法 一个线程池的例子 任务 池子 测试 说明 总结 Links 文章友链 相关资源 背景 线程池的来由 服务端的程序,例如数据库服务器和Web服务器,每次收到客户端的请求,都会创建一个线程来处理这些请求。 创建线...

西召 2552

线程池(ThreadPoolExecutor)

我们的线程池主要有两个部分任务队列,存放我们提交的任务若干个工作线程,负责执行任务//任务队列 private BlockingQueue < Runnable > queue = new LinkedBlockingQueue < >();//submit方法,向任务队列提交任务 public void submit(Runnable runnable) {try {} } //创建工作线程,指定线程池中线程数量为n public MyExecutorService(int n) {

buhuisuanfa的博客 2044

Java 并发基础之 Java 线程池详解

AbstractExecutorService 抽象类派生自 ExecutorService 接口,然后在其基础上实现了几个实用的方法,这些方法提供给子类进行调用。这个抽象类实现了invokeAny方法和invokeAll方法,这里的两个newTaskFor方法也比较有用,用于将任务包装成 FutureTask。定义于最上层接口 Executor中的由于不需要获取结果,不会进行 FutureTask 的包装。需要获取结果(FutureTask),用submit方法,不需要获取结果,可以用execute。

欢迎来到我的博客 670

学java怎么记住知识点?

很多初学者在学习Java的过程中都会遇到类似的情况,“今天学,明天忘”,好的学习思路和方法也能让你事半功倍,无论是学习什么,都需要找到一个适合自己的学习方法,这样你学习起来也会相对的容易很多,学java怎么记住知识点?本篇来帮大家解答一下这个问题。 学java怎么记住知识点? 方法一:比起重复记忆,一边思考、du一边动手、一边测试、一zhi边记忆更有效果。就算犯dao错了对记忆也有帮住。 方法二:学会将复杂的问题简单化,罗列编码步骤,按照步骤解决问题。 方法三:编码前,想着结果,想着应用场景,想

gu1857035894的博客 1063

JAVA线程池

package cn.itcast.hemai2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一

Android探索之路 868

【Java线程】线程池的拒绝策略、异常捕获

目录标题拒绝策略1、拒绝策略使用场景2、JDK内置拒绝策略3、自定义线程池创建方式4、自定义拒绝策略1.简单示例2.JAVA线程池自定义拒绝策略以及利用反射获取任务参数线程池异常处理1、run函数中的try catch是必须的2、其他异常捕获1.通过设置UncaughtExceptionHandler打印异常日志2.双层try catch嵌套(项目中的使用) 使用线程池之前,先思考下面几个问题: 该异步场景适合用线程还是线程池? 使用JAVA默认的线程池,还是自定义的线程池? 使用JAVA默认的拒绝策略,

qq_43783527的博客 4747

Java并发编程之线程池详解

这篇博客主要介绍了线程池以及自定义线程池的实现,最后介绍了ThreadPoolExecutor类

qq_54469537的博客 2219

java线程池设计_深度解读 java 线程池设计思想及源码实现

前言我相信大家都看过很多的关于线程池的文章,基本上也是面试必问的,好像我写这篇文章其实是没有什么意义的,不过,我相信你也和我一样,看了很多文章还是一知半解,甚至可能看了很多瞎说的文章。希望大家看过这篇文章以后,就可以完全掌握 Java 线程池了。本文一大重点是源码解析,不过线程池设计思想以及作者实现过程中的一些巧妙用法是我想传达给读者的。本文还是会一行行关键代码进行分析,目的是为了让那些自己看源码...

weixin_29706351的博客 500

Java 线程池

为什么会想到写这篇文章呢,其实网上也挺多的,主要是这次和同学讨论到一个问题(就是线程工厂创建线程的时候,再次对runnable的run方法捕获异常),就涉及到线程池,而且有些疑问,然我去看一些博客的时候也写的不对,最后还是通过看源码解决自己的疑问。首先,这篇博客会分析一些源码,线程池的设计,然后要注意的一些事项。如果认真读完,保证有收获的。 基本概念 线程池是什么 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL 数据库连接池。通常,在..

tryingpfq的博客 632
上一篇: Mysql:分库分表后怎么解决分布式访问的问题
抹茶苹果梨
博客等级 码龄1年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抹茶苹果梨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值