Java基础—普通阻塞队列

news2025/1/12 23:26:34

普通阻塞队列

除了刚介绍的两个队列,其他队列都是阻塞队列,都实现了接口BlockingQueue,在入队/出队时可能等待,主要方法有:

入队,如果队列满,等待直到队列有空间

void put(E e) throws InterruptedException;

出队,如果队列空,等待直到队列不为空,返回头部元素
E take() throws InterruptedException;

入队,如果队列满,最多等待指定的时间,如果超时还是满,返回false
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;

出队,如果队列空,最多等待指定的时间,如果超时还是空,返回null
E poll(long timeout, TimeUnit unit) throws InterruptedException;

普通阻塞队列是常用的队列,常用于生产者/消费者模式。

ArrayBlockingQueue和LinkedBlockingQueue都实现了Queue接口,表示先进先出的队列,尾部进,头部出,而LinkedBlockingDeque实现了Deque接口,是一个双端队列。

ArrayBlockingQueue是基于循环数组实现的,有界,创建时需要指定大小,且在运行过程中不会改变,这与我们在容器类中介绍的ArrayDeque是不同的,ArrayDeque也是基于循环数组实现的,但是是无界的,会自动扩展。

LinkedBlockingQueue是基于单向链表实现的,在创建时可以指定最大长度,也可以不指定,默认是无限的,节点都是动态创建的。LinkedBlockingDeque与LinkedBlocking-Queue一样,最大长度也是在创建时可选的,默认无限,不过,它是基于双向链表实现的。

内部,它们都是使用显式锁ReentrantLock和显式条件Condition实现的。

ArrayBlockingQueue的实现很直接,有一个数组存储元素,有两个索引表示头和尾,有一个变量表示当前元素个数,有一个锁保护所有访问,有“不满”和“不空”两个条件用于协作与ArrayBlockingQueue类似,LinkedBlockingDeque也是使用一个锁和两个条件,使用锁保护所有操作,使用“不满”和“不空”两个条件。

LinkedBlockingQueue稍微不同,因为它使用链表,且只从头部出队、从尾部入队,它做了一些优化,使用了两个锁,一个保护头部,一个保护尾部,每个锁关联一个条件。

了解更多Java知识,可以点击下方链接和小编一起学习哟~

https://www.bilibili.com/video/BV11G4y1x7uu/?spm_id_from=333.999.0.0&vd_source=a7816e3b2a3a67ac39dc87f6bf92421cicon-default.png?t=M85Bhttps://www.bilibili.com/video/BV11G4y1x7uu/?spm_id_from=333.999.0.0&vd_source=a7816e3b2a3a67ac39dc87f6bf92421c

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

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

相关文章

计算机毕业设计Python+Django的银行取号排队系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时…

MySQL之短时间提高性能的措施

文章目录前言短连接风暴慢查询QPS(每秒查询数)突增总结前言 我们在使用数据库的时候,总会有那么一段时间,数据库的压力会特别大。比如,用户的使用的高峰期,或者活动上线的时候等等。那么为了应对突然暴增的…

Child Tuning: 反向传播版的Dropout

这篇文章主要是对EMNLP2021上的论文Raise a Child in Large Language Model: Towards Effective and Generalizable Fine-tuning进行讲解。论文标题有些抽象,但是用作者的话来说,这篇论文的思想可以归结为两个词:Child Tuning 虽然这篇文章主…

0-1背包问题

在将什么是0-1背包问题前,先来看下面一道例题: 题意概要:有 n 个物品和一个容量为 W 的背包,每个物品有重量w i和价值v i两种属性,要求 选若干物品放入背包使背包中物品的总价值最大且背包中物品的总重量不超过背包的容…

京东一小伙一年输出20篇专利,其实你也可以

前言: ☆ 本文属于技术总结类干货分享,是实战但又不同于实战,所以不能保证每位同学读后都可以立马自己也输出一篇合格的专利; ☆ 但通过本文的总结分享,已经帮身边同学半年内输出大于100篇专利,所以如果你细…

【字母识别】基于matlab BP神经网络英文字母识别【含Matlab源码 2226期】

⛄一、BP神经网络英文字母识别 1 典型前向网络——BP神经网络 前向网络是目前研究最多的网络形式之一, 它包含输入层、隐层以及输出层, 其中隐层可以为一层或者多层 , 其结构如图1所示. 图1 BP神经网络模型 BP神经网络误差反向传播学习算法的基本思想如下:向网络提供训练例子…

智慧公路筑基者!天翼云打造全栈能力新底座

11月9日-11日,在第十七届中国智能交通年会(ITSAC 2022)暨2022中国智能交通大会上,中国电信作为本届大会特别支持单位,于11月10日成功举办了主题为“构建智慧公路全栈能力新底座”的运营商赋能智慧交通创新论坛。 交通运…

windows 安装ElasticSearch(es)可视化工具

因项目需要,小编这里使用的是 npm版本 6.14.16 nodejs版本14.19.1 1、下载nodejs地址:https://nodejs.org/download/release/v14.19.1/ 版本需要可根据自己电脑进行选择 2、下载可视化项目包 下载地址:https://github.com/mobz/elasticse…

2020年聚合支付评级结果及如何开展评级工作经验分享

一年一度的收单外包服务机构评级工作即将启动,笔者认为479家聚合支付机构也在关心本机构要不要进行评级并希望了解聚合支付评级要求、评级对机构有何意义和影响、目前聚合支付评级情况及如何开展评级工作。为此,基于笔者最近作为两家聚合支付机构常年顾问…

传奇脚本中提到的WIL序号是什么?在哪查看WIL序号?

传奇M2引擎设置WIL序号方便脚本<IMG:12:2>代码调用,在NPC对话界面显示图片信息。 传奇补丁文件WIL序号设置方法&#xff1a; 传奇M2-查看-列表信息二 很多脚本命令和功能都会使用这个WIL序号。 WIL序号的计算是从0开始的,例如下图中从0开始数 MonEffect.wzl的WIL文件序号…

专肽生物:蛋白激酶C底物 Protein Kinase C Substrate

蛋白激酶 C (PKC) 底物。编号: 161721 中文名称: 蛋白激酶C底物 Protein Kinase C Substrate CAS号: 105802-82-2 单字母: H2N-VRKRTLRRL-OH 三字母: H2N-Val-Arg-Lys-Arg-Thr-Leu-Arg-Arg-Leu-COOH 氨基酸个数: 9 分子式: C51H100N22O11 平均分子量: 1197.48 精确分子量: 1196…

北科天绘 16线3维激光雷达开发教程

文章目录前言一、配置IP地址二、ROS Driver1.创建工作空间并初始化2.启动雷达驱动程序三、 RVIZ 显示 R-Fans 点云数据前言 本教程使用的是三维激光雷达为北科天绘的R-Fans-16,采用网口连接传输数据&#xff0c;9-36V供电。 Ubuntu版本为20.04&#xff0c;Ros版本为Neotic。 !…

【长难句分析精讲】定语从句

1. 定语从句知识总结 1.基本概念&#xff1a; 先行词、关系词、不完整的句子2.先行词的形式&#xff1a; 名词、代词、名词短语、句子3.关系词的秘密 关系代词&#xff1a; 在从句中充当主(who, which, that, whom)、宾(which, that)、定语(whose)&#xff09;关系副词 &#…

送别金铁霖,被谷传民起诉,农民歌唱家大衣哥人品高下立判

最近一段时间&#xff0c;因为被著名作家兼编剧谷传民告上法庭&#xff0c;农民歌唱家大衣哥一夜之间人设崩塌。有人说大衣哥不讲武德&#xff0c;无偿使用别人的音乐&#xff0c;赚钱后又不支付版权费&#xff0c;农民歌唱家的人品真不咋样。 面对互联网铺天盖地的流言蜚语&am…

高斯判别分析(GDA)公式推导

解&#xff1a;将概率分布代入对数似然函数&#xff0c; l(ψ,μ0,μ1,∑)∑i1mlogpX∣Y(x(i)∣y(i);μ0,μ1,∑)∑i1mlogpY(y(i);ψ)l(\psi,\mu_0,\mu_1,\sum)\sum^m_{i1}{log{p_{X|Y}(x^{(i)}|y^{(i)};\mu_0,\mu_1,\sum)}}\sum^m_{i1}log{p_Y}(y^{(i)};\psi)l(ψ,μ0​,μ1​…

mbedtls 自带SSL demo调试

概述&#xff1a; 运行mbedtls自带 ssl demo的记录&#xff1b; 操作过程&#xff1a; 编译Demo&#xff0c;请看我专栏中的相关文章 先运行服务端程序&#xff0c;运行ssl_server.exe&#xff0c;运行结果如下&#xff1a; mbedtls-3.2.1\mbedtls-3.2.1\programs\ssl> .…

通用后台管理系统前端界面

1、项目搭建 局部安装vue-cli 4.5.15 和创建项目 1.1 局部安装vue-cli 工具&#xff0c;方便不同版本进行切换 ###安装指定版本的vue脚手架工具 或者是已安装了&#xff0c;该命令则为使用4.5.15版本的vue/cli npm i -D vue/cli4.5.15 ###查看当前vue脚手架工具版本…

第七节.常用Linux命令—查找文件,软硬链接,软件安装,系统信息

第七节.常用Linux命令—查找文件&#xff0c;软硬链接&#xff0c;软件安装&#xff0c;系统信息 1.查找文件&#xff1a; 序号命令作用01find [路径] -name “.py”查找指定路径下扩展名是.py的文件&#xff0c;包括子目录 功能&#xff1a;通常用来在特定目录下搜索符合条件…

SpringMVC之全局异常管理

在开发过程中一个项目可以要抛出很多很多的异常&#xff0c;这对于用户来说非常地不方便&#xff0c;而且非常地不安全&#xff0c;特别容易导致用户信息地泄露。在SpringMVC中有一种全局异常管理方法&#xff0c;这种方法收集项目中存在所有地异常&#xff0c;以保证项目正常地…

windows 定制 terminal 上手实践

文章目录1. 前言2. 安装 Windows Terminal3. 安装 nerd-fonts4. Microsoft store 安装 powershell5. 改变终端背景颜色6. 安装 scoop7. 安装 git8. 安装 Neovim9. 设置别名10. 安装 oh My Posh11. 自定义 prompt&#xff08;path&#xff09;12. 安装 nodejs13. 安装 Terminal …