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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023最新最全面Java复习路线(含P5-P8),已收录 GitHub

小编整理出一篇 Java 进阶架构师之路的核心知识,同时也是面试时面试官必问的知识点,篇章也是包括了很多知识点,其中包括了有基础知识、Java 集合、JVM、多线程并发、spring 原理、微服务、Netty 与 RPC 、Kafka、日记、设计模式、Java 算法、…

音视频技术开发周刊 | 297

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 Geenee AR为品牌商和零售商提供虚拟试穿应用 这意味着Geenee AR的虚拟试穿解决方案能够与品牌商现有的销售渠道无缝集成。 谁说苹果掉队了?WWDC上只字未提AI&a…

九种分布式ID解决方案

背景 在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表进行了分库分表操作,这时候数据库的自增ID显然不能作为某个订单的唯一标识。除此之外还有其他分布式场景对分布式ID的一些要求: 趋势递增&#…

java SSM 宿舍管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 宿舍管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/…

JVM零基础到高级实战之内存区域分布与概述

JVM零基础到高级实战之内存区域分布与概述 JVM零基础到高级实战之内存区域分布与概述 文章目录 JVM零基础到高级实战之内存区域分布与概述前言Java语言为甚么优势巨大?总结 前言 JVM零基础到高级实战之内存区域分布与概述 Java语言为甚么优势巨大? 一处…

强大的工具:APISpace IP归属地查询API

引言 IP地址在互联网世界中扮演着重要的角色,对于许多应用程序和服务来说,了解IP地址的归属地信息可以提供有价值的洞察和功能。 在本文中,我们将介绍一种名为IP归属地-IPv4区县级 API 的强大工具,它提供了查询 IP 地址归属地信…

网内计算:可编程数据平面和技术特定应用综述

网内计算:可编程数据平面和技术特定应用综述 摘要——与云计算相比,边缘计算提供了更靠近终端设备的处理,降低了用户体验的延迟。最新的In-Network Computing范例采用可编程网络元素在数据达到边缘或云服务器之前计算,促进了常见…

《百年孤独》15句经典语录

句句都是人生真相,说透了所有人的孤独。 1、生命中曾经有过的所有灿烂,原来终究,都需要用寂寞来偿还。 2、过去都是假的,回忆是一条没有尽头的路。 这句话是最受读者欢迎的一句话,回忆就是一条没有尽头的路&#xf…

【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】

目录 1、Linux内核输入子系统概念导入1.1 输入设备工作机制1.2 运行框架1.3 分层思想 2、驱动开发步骤2.1 在init()或probe()函数中2.2 在exit()或remove()函数中:2.3 上报事件2.4 input驱动要素导图2.5 input驱动的总…

LVS负载均衡群集部署——DR直接路由模式

这里写目录标题 一 、 LVS-DR 工作原理二、数据包流向分析三、LVS-DR 模式的特点四、ARP问题4.1 问题一:IP地址冲突4.2 问题二:第二次再有访问请求 五、部署LVS-DR集群5.1 配置Tomcat 多实例服务器5.2 配置web节点服务器配置web1节点服务器配置Nginx七层…

Flutter进阶篇-布局(Layout)原理

1、约束、尺寸、位置 overrideWidget build(BuildContext context) {return Scaffold(body: LayoutBuilder(builder: (context, constraints) {print("body约束:" constraints.toString());return Container(color: Colors.black,width: 300,height: 300,child: L…

MATLAB | 绘图复刻(九) | 泰勒图及组合泰勒图

有粉丝问我这个图咋画: 我一看,这不就泰勒图嘛,就fileexchange上搜了一下泰勒图绘制代码,但是有的代码比较新的版本运行要改很多地方,有的代码需要包含一些压缩包没并没有的别人写的函数,于是我干脆自己写了…

【MySQL 数据库】11、学习 MySQL 中的【锁】

目录 一、锁的概述与分类二、全局锁(全库数据备份)三、表级锁(1) 表锁(2) 元数据锁(Meta Data Lock)(3) 意向锁 四、行级锁(1) 行锁(2) 间隙锁&临键锁 一、锁的概述与分类 锁是计算机协调多个进程或线程并发访问某一资源的机…

国产Gauss 分布式数据库概述

一、前言 GaussDB 是华为2023年6月7日发布新一代分布式数据库,采用share-nothing架构,数据自动分片,通过GTM-Lite技术实现事务强一致,无中心节点性能瓶颈,是华为基于openGauss自主创新研发的一款分布式关系型数据库&am…

STM32CubeMX | 44 - 使用GPIO点亮单总线RGBLED

一、单总线RGBLED 1. 硬件连接 在DragonFly上有四个全彩灯相连: 其中RGB_LED连接到STM32的PB9引脚。 2. 单总线通信协议 单总线通信协议中,表示bit0和bit1的码型如下: 时序值如下: 驱动一个单总线RGBLED只需要传输24bit颜色数据即可(MSB,高位优先),格式如下(注意…

C++设计模式 - 创建型模式之工厂模式

文章目录 C设计模式 - 创建型模式之工厂模式接口和针对接口编程 1. 简单工厂模式适用场合UML代码示例 2. 工厂方法模式适用场合UML代码示例 3. 抽象工厂模式适用场合UML代码示例 总结 C设计模式 - 创建型模式之工厂模式 工厂模式属于创建型模式,大致可以分为三类&a…

力扣 209. 长度最小的子数组

一、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target。 找出该数组中满足其和大于等于 target 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例 1: 输入:target 7, nums [2,3,1…

Uni-app学习从0到1开发一个app——(3)简单小工程内容介绍

文章目录 工程文件 看看一个标准的hello微信小程序工程文件的组成和作用。 工程文件 可以参考官方教程:传送门 之前的文章有详细的开发环境介绍,传送门Uni-app学习从0到1开发一个app——(2)windowns环境搭配,这里我们先建一个简单的示例微信…

C++教程(06)——变量类型

C 变量类型 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母…

华为OD机试真题B卷 Java 实现【自守数】,附详细解题思路

一、题目描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如:252 625,762 5776,93762 87909376。 请求出n(包括n)以内的自守数的个数。 数据范围: 1≤n≤10000 二、输入描述 int型整数。 三、输出描述 n以内…