202108110022 - 线程池常用的阻塞队列

news/2025/3/19 22:34:49/文章来源:https://www.cnblogs.com/route/p/18782053

kedBlockingQueue

对于 FixedThreadPool 和 SingleThreadExector 而言,它们使用的阻塞队列是容量为 Integer.MAX_VALUE 的 LinkedBlockingQueue,可以认为是无界队列。由于 FixedThreadPool 线程池的线程数是固定的,所以没有办法增加特别多的线程来处理任务,这时就需要 LinkedBlockingQueue 这样一个没有容量限制的阻塞队列来存放任务。这里需要注意,由于线程池的任务队列永远不会放满,所以线程池只会创建核心线程数量的线程,所以此时的最大线程数对线程池来说没有意义,因为并不会触发生成多于核心线程数的线程。

chronousQueue

第二种阻塞队列是 SynchronousQueue,对应的线程池是 CachedThreadPool。线程池 CachedThreadPool 的最大线程数是 Integer 的最大值,可以理解为线程数是可以无限扩展的。CachedThreadPool 和上一种线程池 FixedThreadPool 的情况恰恰相反,FixedThreadPool 的情况是阻塞队列的容量是无限的,而这里 CachedThreadPool 是线程数可以无限扩展,所以 CachedThreadPool 线程池并不需要一个任务队列来存储任务,因为一旦有任务被提交就直接转发给线程或者创建新线程来执行,而不需要另外保存它们。

我们自己创建使用 SynchronousQueue 的线程池时,如果不希望任务被拒绝,那么就需要注意设置最大线程数要尽可能大一些,以免发生任务数大于最大线程数时,没办法把任务放到队列中也没有足够线程来执行任务的情况。

ayedWorkQueue

第三种阻塞队列是DelayedWorkQueue,它对应的线程池分别是 ScheduledThreadPool 和 SingleThreadScheduledExecutor,这两种线程池的最大特点就是可以延迟执行任务,比如说一定时间后执行任务或是每隔一定的时间执行一次任务。DelayedWorkQueue 的特点是内部元素并不是按照放入的时间排序,而是会按照延迟的时间长短对任务进行排序,内部采用的是“堆”的数据结构。之所以线程池 ScheduledThreadPool 和 SingleThreadScheduledExecutor 选择 DelayedWorkQueue,是因为它们本身正是基于时间执行任务的,而延迟队列正好可以把任务按时间进行排序,方便任务的执行。

ForkJoinPool

的内部类WorkQueue,有上限,上限在源码中规定了:
static final int MAXIMUM_QUEUE_CAPACITY = 1 << 26; // 64M

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

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

相关文章

202108032324 - kafka的生产流程

由上图可以看出:KafkaProducer有两个基本线程: 主线程: 负责消息创建,拦截器,序列化器,分区器等操作,并将消息追加到消息收集器 RecoderAccumulator中; 消息收集器RecoderAccumulator为每个分区都维护了一个Deque<ProducerBatch> 类型的双端队列。 ProducerBatch…

Cython二进制逆向系列(三)运算符

在这篇文章里,我们会讨论Cython是如何处理运算符的(数学运算符、位运算符、in/not in 运算符、 ==运算符与逻辑运算符)。总的来叔其中大部分是调用虚拟机api来实现的。Cython二进制逆向系列(三)运算符在开始前,先给出本文用到的py源代码 def test1(x, y):# 数学运算符a…

QOJ 9785 Shrooks

曼哈顿距离转切比雪夫距离,对限制的贪心满足,扩宽限制,简化信息首先考虑限制的形式:对于两点 \((x_1, y_1), (x_2, y_2)\),要求 \(|x_1 - x_2| + |y_1 - y_2| \le n\)。 但是这个式子与 \(x_1, x_2, y_1, y_2\) 这 \(4\) 个值都强相关,且这里的绝对值也并不好拆开处理。 …

golang的GC机制

一、垃圾回收 什么是垃圾回收?垃圾回收(GC,garbage collection)是自动内存管理的一种形式,通常由垃圾收集器收集并适时回收或重用不再被对象占用的内存,比如众所周知的Java语言就能很好的支持GC。后起之秀——Go语言也同样支持垃圾回收,它使得Go程序员在编写程序的时候不…

fastjson漏洞复现(fastjson 1.2.47)

原理: Fastjson 的 @type 字段允许反序列化时动态指定类,攻击者可以通过指定带有危险行为的类,并结合 RMI/LDAP 远程加载恶意类,从而实现命令执行。开启vulhub靶场//如何验证是否存在fastjson反序列化漏洞 有json数据传输的地方可能存在 可以尝试使用dnslog带外但是不知道…

基于神经网络逆同步控制方法的两变频调速电机控制系统matlab仿真

1.课题概述两电机变频调速系统是一个多输入多输出非线性强耦合的控制系统。本课题使用神经网络构造原系统的a阶逆系统,设计线性闭环调节器进行控制,通过matlab对系统进行仿真。对两电机变频调速系统更为精确地实现了张力和速度间的解藕控制。2.系统仿真结果 (完整程序运行后…

使用gradio实现实时语音识别

这里通过gradio来实现实时语音识别,通过上传一个文件,当点击提交后则在右侧输出其相应识别的文字。 实现代码比较简单,如下所示: import gradiodef convert(file_bytes):# 语音识别方法,其中file_bytes是采样率与对应numpy.ndarray实例return recognition_func(file_bytes[1])d…

英语四级跟练计划第一天

前言 今天给英语四级报了名,以我以往英语的水平来看,如果不早早开始复习,绝无通过的可能,走投无路的我只好去向deepseek求助,上一次320分的考生,这一次该付出何等的努力才可以考到425分,如此为我制定了90天的四级复习计划。我相信有很多人和我一样,都被英语四级通过给困…

202107191556 - 层次分析法计算流程

构造矩阵 一致性检验计算最大特征值计算一致性指标CI CI = ( λ - n ) / ( n - 1 )随机一致性指标RI取值计算一致性比率CR计算特征向量列向量归一化 求行和后归一化根据特征向量求最大特征值计算过程

crontab 命令

crontab -l 查看所有任务 crontab -e 编辑任务* * * * * /www/server/php/82/bin/php /www/wwwroot/default/1.php >> /www/wwwroot/default/cron_log.log 2>&1cd /www/wwwroot/www.pk777slots.com/ && php think test在那个目录运行 cd /www/wwwroot/www…

python实验一 20241202王凯

课程:《Python程序设计》 班级: 2412 姓名: 王凯 学号:20241202 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 (1)提前了解了一下python,了解它的地位排名,并熟悉Python开发环境;(2)练习Python运行、调试技能;(编写书中的程序,并进行…