【并发篇】04-05 线程池核心参数代码演示

news2024/11/18 9:27:41

B站 黑马程序员 java八股的视频笔记 自留备忘 如有错误请多多指教。

(一)理论知识

这道题其实就是在问java中线程池的实现类ThreadPoolExecutor,这个类参数最多的构造方法有7个参数。

线程池本质上就是管理一组线程,用来执行提交给线程池的任务。提交任务用的是submit(task)。

corePoolSize设置核心线程数。核心线程执行完任务后仍然需要保留在线程池中的,救急线程执行完没啥用了就不需要保存在线程池中。

核心线程数可以为0,也就是说可以执行完任务都不保留在池中。 

workqueue用来缓冲任务,当核心线程都在忙的时候,新来的任务就加到workqueue中。等到有空闲下来的核心线程,就从任务队列中获取任务。

        任务队列是有上限的(如果没有上限就会造成内存紧张),核心线程也是有上限的,如果这两个都满了,新来的任务怎么办呢?这时候就交由救急线程来执行。

keepAliveTime生存时间和unit时间单位都是用来控制救急线程的,单位可以秒或毫秒。在这个时间范围内救急线程没有任务可以执行,就把他从线程池中去掉。

当workqueue、核心线程和救急线程都已经满了,再来的新任务怎么办?这时候就要用到handler拒绝策略,是踢掉,报异常,还是替换掉队列中的任务,还是什么都不做。

threadFatory线程工厂不太重要,就是为线程在创建时起名字的。

(二)代码演示

main函数中自定义了一个线程池ThreadPoolExecutor类。然后调用自己写的showState方法查看线程池中的线程和队列状态。(可以暂时不考虑showState方法是怎么实现的,重点是理解线程池)

【初始化线程池】

 可以看到定义了核心线程数为2,最大线程数为3,也就是说只能有1个救急线程,救急线程存活时间为0,时间单位为毫秒,工作队列是长度为2的queue,创建线程的名称为myThread+数字。

【添加任务,占满核心线程和工作队列】

准备好线程池后,先添加4个任务到池中:

 

 

 可以看到先添加的任务1和2已经开始运行,核心线程名额满了,这两个线程的工作时间是一个小时,核心线程短时间内还不能空闲下来。那么任务3和4进入队列等待。

【再新添任务5,救急线程就来救急了】

 

【将任务5的时间设置为一小时】

 救急线程要忙着花一个小时解决任务5,就管不了工作队列中的任务3和4了。

现在,核心线程、救急线程、工作队列都是满的。又来任务了怎么办?

这时候就启动拒绝策略了!总共有以下四种策略:

AbortPolicy:会抛出 RejectedExecutionException 异常。

CallerRunsPolicy:任务不进入线程池执行,交给调用者线程去执行。     

DiscardPolicy:丢弃、忽略新来的任务。

DiscardOldestPolicy :新来的任务会替换掉工作队列中最久没被执行的任务。

ps. 等我有时间了就把截图换代码片段,最近时间太紧张。代码还是要亲自运行一下才会理解得更透彻。

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

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

相关文章

python:消除已安装库在import导入时出现红线问题

问题 在pycharm中,对于已经安装的库文件,在进行import导入时出现红线,不影响运行, 简单有效的消除红线的方法。 解决办法 在工程目录中的程序可以采用Mark directory - Source Root方法。 对于安装的第三方库文件环境不在本工程…

springboot实现后端防重复提交(AOP+redis分布式锁)单机情况下

文章目录 0、依赖1、自定义接口2、实现redis分布式锁3、自定义AOP4、测试 为什么要实现这个功能呢,可能用户在提交一份数据后,可能因为网络的原因、处理数据的速度慢等原因导致页面没有及时将用户刚提交数据的后台处理结果展示给用户,这时用户…

LayoutTransformer: Layout Generation and Completion with Self-attention

LayoutTransformer: Layout Generation and Completion with Self-attention (Paper reading) Kamal Gupta, University of Maryland, US, Cited:41, Code, Paper 1. 前言 我们解决了在各种领域中(如图像、移动应用、文档和3D对象)进行场景布局生成的…

后台管理系统模板 - zhadminvue

没事的时候写了一个后台管理系统模板:zhadminvue,欢迎大家提issue和PR,以及想要添加一些有意思的功能模块,在没事的时候我也会加进去~ github:https://github.com/iotzzh/zh-admin-vue gitee: https://gitee.com/iotzzh/zh-admin.…

算法模板(4):动态规划(1)

动态规划 闫氏 d p dp dp 分析法: 集合:怎么划分。通常以集合的划分来定义数组。 f ( i , j ) f(i, j) f(i,j):选前 i i i 个物品. 体积不超过 j j j。全部初始化为 0 0 0; j j j 非负时状态才合法。体积恰好是 j j j。 f…

Springboot集成magic-api

目录 1、前言 2、springboot集成magic-api 2.1、添加maven依赖 2.2、application.yml配置 2.3、编写测试接口 2.4、启动程序,访问接口 2.5、magic-api脚本 3、magic-api其他语法 4、注意事项 1、前言 今天项目中遇到一个问题,springboot后端项目…

《机器学习算法竞赛实战》-chapter3数据探索

《机器学习算法竞赛实战》学习笔记,记录一下自己的学习过程,详细的内容请大家购买作者的书籍查阅。 数据探索 数据探索是竞赛的核心模块之一,贯穿竞赛始终,也是很多竞赛胜利的关键。 在竞赛中如何确保自己准备好竞赛使用的算法模…

cmake 添加一个库

目录 项目格式 cmake基本语法 添加库 链接库 添加库的头文件 cmake打印字符串 库的cmake文件 cmake生辰库 mian函数中使用 让库成为可选的 cmake基本语法 设置option变量 cmake设置条件链接库 链接库 添加头文件 修改cmake配置文件 修改引用的源码 项目格式 …

MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件

MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件 1、功能描述 msa311可以识别单击、双击事件,类似手机上的点击返回,双击截屏功能。 单击,双击都能产生中断事件。 中断事件产生后,从对应的状态寄存器读…

算法模板(4):动态规划(3) 做题积累(1)

动态规划 1. 背包 1. 1024. 装箱问题 题意:有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。别学那么死板。…

2023夏-PAT甲级题解

目录 总结: A-1 Trap Input Specification: Output Specification: Sample Input: Sample Output: 题意: 思路: AC代码: A-2 Queue Using Two Stacks Input Specification: Output Specification: Sample Input: Sa…

SpringBoot 项目部署笔记

1. 直接通过 jar 包部署 本地直接 build package 成 jar 包,上传至服务器 ps -ef|grep XXX #查找项目进程sudo kill -9 19727 #杀掉项目进程nohup sudo java -jar *.jar >> app.log & #后台运行 jar &代表让该命令在后台执行 3. 通过 Jenkins …

pytorch笔记:conv2d

来自B站视频,API查阅,TORCH.NN nn.conv2d 中一般 kernel_size 是小奇数,padding 设置为 k − 1 2 \frac{k-1}{2} 2k−1​(实际上padding的是 k − 1 k-1 k−1,因为参数的意义是左右各padding),

探索Xiotman:物联网软件架构的创新之路

文章目录 探索Xiotman:物联网软件架构的创新之路什么是物联网什么是XiotmanXiotman的特点Xiotman的架构Xiotman的使用安装env工具获取源代码使用其他教程 Xiotman的开源地址 总结 探索Xiotman:物联网软件架构的创新之路 什么是物联网 🚀&am…

高燃盛会全程回顾|鸿雁加速推进数字转型之路

6月10日,以“双翅齐振雁南飞”为主题的鸿雁电器数字化营销启动大会暨中山古镇鸿雁全屋智能体验中心开业庆典,在中山古镇华艺广场圆满落幕。 古镇镇长阮志力、华艺集团董事长区锦标、华艺广场总经理丁瑜、古镇灯饰传媒董事长曹利晖以及杭州鸿雁电器有限公…

spring boot + xxl-job 分布式任务调度

一、介绍 1、任务调度 1.1、什么是任务调度 我们可以先思考一下下面业务场景的解决方案: 某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。某财务系统需要在每天上午10点前结算前一天的账单数据,统计汇总。某电…

那年我头脑发热,选择了自动化,后来我掉入计算机的世界无法自拔

首先,小雅兰是22届高考考生,而且当时填报志愿也没有填报到计算机相关的专业去,小雅兰是自动化专业的学生,是由于一次偶然的机会,了解到了这个行业,对于写代码所带来的成就感,总之,我…

Java013——常见进制以及转换

一、常见进制 十进制 数字组成:0-9这十个数字组成,不能以0开头 进位规则:满10进1 int num1 10;//对应的十进制为10二进制 数字组成:0-1这两个数字组成,以0b或0B开头 进位规则:满2进1 int num2 0b1010;…

华为存储IA篇仿真器搭建

设备清单 编号 设备名 数量 备注 01 Windows系统主机 1台 为VMware提供安装位置 02 VMware软件 1份 提供存储仿真器的部署环境 03 仿真器文件 1份 用于部署estor虚拟机 【注意】:暂无注意事项 一、下载安装文件并配置虚拟机设备清单 1.1…

TypeScript 自定义装饰器

(预测未来最好的方法就是把它创造出来——尼葛洛庞帝) 装饰器 装饰器一种更现代的代码模式,通过使用的形式注入在属性,寄存器,方法,方法参数和类中,比如在Angular,Nestjs和midway等…