2-2-3-5-3、SynchronousQueue详解

news2024/9/23 15:19:14

简介

SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take

在这里插入图片描述


如图所示,SynchronousQueue 最大的不同之处在于,它的容量为 0,所以没有一个地方来暂存元素,导致每次取数据都要先阻塞,直到有数据被放入;同理,每次放数据的时候也会阻塞,直到有消费者来取
需要注意的是,SynchronousQueue 的容量不是 1 而是 0,因为 SynchronousQueue 不需要去持有元素,它所做的就是直接传递(direct handoff)。由于每当需要传递的时候,SynchronousQueue 会把元素直接从生产者传给消费者,在此期间并不需要做存储,所以如果运用得当,它的效率是很高的

应用场景

SynchronousQueue非常适合传递性场景做交换工作,生产者的线程和消费者的线程同步传递某些信息、事件或者任务
SynchronousQueue的一个使用场景是在线程池里。如果我们不确定来自生产者请求数量,但是这些请求需要很快的处理掉,那么配合SynchronousQueue为每个生产者请求分配一个消费线程是处理效率最高的办法。Executors.newCachedThreadPool()就使用了SynchronousQueue,这个线程池根据需要(新任务到来时)创建新的线程,如果有空闲线程则会重复使用,线程空闲了60秒后会被回收

在这里插入图片描述

使用

BlockingQueue<Integer> synchronousQueue = new SynchronousQueue<>();

构造器

  • 公平获取:使用队列结构,队尾入队,队头出队
  • 非公平获取:使用栈结构,后进先出

在这里插入图片描述

主要方法实现

take和put方法都是调用同一个方法,只是通过是否有元素来区分

put方法

在这里插入图片描述

take方法

在这里插入图片描述

队列结构

take和put方法都是执行java.util.concurrent.SynchronousQueue.TransferQueue#transfer方法,放置于队列中通过节点中的isData来区分,如下图:

队列节点属性

在这里插入图片描述

栈结构

take和put方法都是执行java.util.concurrent.SynchronousQueue.TransferStack#transfer方法,放置于队列中通过节点中的mode来区分,如下图:

栈节点属性

在这里插入图片描述


同步队列会将先操作的线程阻塞入队,在通过另一操作来出队,达到无关具体操作,也就是说,入队的可能是生产线程,也有可能是消费线程,反之亦然

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

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

相关文章

排序算法-计数排序、桶排序、基数排序

计数排序、桶排序、基数排序 这三种排序算法都利用了桶的概念&#xff0c;都属于用空间换时间的算法。但对桶的使用方法上有明显差异&#xff1a; 计数排序&#xff1a;每个桶只存储单一键值&#xff1b;桶排序&#xff1a;每个桶存储一定范围的数值&#xff1b;基数排序&…

Linux网络基础(基础概念)

Linux网络基础(基础概念) 文章目录Linux网络基础(基础概念)1.计算机网络的发展过程1.1 独立模式1.2 网络互联模式1.3 局域网 LAN1.4 广域网 WAN2.计算机网络协议2.1 协议的概念2.2 什么是网络协议2.3 什么是网络协议簇2.4 OSI 七层模型2.5 TCP/IP 五层模型3.网络传输基本流程3.…

3M EDI 855 采购订单确认报文详解

3M公司&#xff0c;全称明尼苏达矿业及机器制造公司。它于1902年成立&#xff0c;总部现位于美国明尼苏达州首府圣保罗市&#xff0c;为世界著名的多元化跨国企业&#xff0c;并且是道琼斯30种工业成分指数股票之一。 3M为管理其庞大的供应链建立了EDI&#xff08;Electronic D…

微信小程序|使用小程序制作一个马赛克处理工具

此文主要使用微信小程序制作一个马赛克处理工具&#xff0c;这个场景在生活中也非常常见&#xff0c;例如新闻之类有些视频或者图片不想给大众展示就会将其和谐掉&#xff0c;这就是马赛克应用。 开发步骤创建小程序功能开发实现API接口响应开发步骤 创建小程序 准备百度以及微…

[附源码]Python计算机毕业设计Django医疗器械公司公告管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

2022年11月份中国最具影响力的50位钧瓷匠人排行榜

讲好钧瓷产业的故事 有深度的故事&#xff0c;有温度的内容 有态度的文字&#xff0c;有立场的思考 版权声明:钧瓷内参独家发布&#xff0c;侵权必究 第320期 钧瓷内参 2022年12月1日 低代码——钧瓷企业数字化转型的核心引擎 2022年11月…

百趣代谢组学分享,肠道神奇细菌竟能调控体重,减肥有望“吃出来”

​代谢组学分享&#xff0c;上海交通大学附属瑞金医院宁光院士团队在Nature Medicine在线发布中国人肥胖的肠道菌群的较新研究&#xff0c;发现一系列丰度显著异于正常体重人群的肠道共生菌&#xff0c;其中多形拟杆菌&#xff08;BT菌&#xff09;口服可降低小鼠血清谷氨酸浓度…

java计算机毕业设计ssm校园安全随手拍系统wc38l(附源码、数据库)

java计算机毕业设计ssm校园安全随手拍系统wc38l&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xf…

港科夜闻|香港科大张利民教授荣获2023年度美国土木工程师学会派克奖(Ralph B. Peck Award)...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、香港科大张利民教授荣获2023年度美国土木工程师学会派克奖(Ralph B. Peck Award)。张利民教授因在岩土多灾害风险评估、基于风险的工程设计和应急决策等领域的杰出贡献&#xff0c;荣获 2023年度美国土木工程师学会派克奖&a…

如何在 Spring Boot 项目中使用 Thymeleaf 和 Bootstrap 实现文件上传

在本教程中&#xff0c;我将向您展示如何在 Spring Boot 项目中使用 Thymeleaf 和 Bootstrap 实现文件上传。我们还使用 Spring Web MultipartFile界面来处理 HTTP 多部分请求。 Thymeleaf 文件上传概述 我们的 Spring Boot Thymeleaf 文件上传示例将具有以下功能&#xff1…

MongoDB的简介及安装配置

文章目录1、什么是MongoDB2、下载3、安装4、配置5、启动拓展&#xff08;mongo不是内部或外部命令&#xff09;1、什么是MongoDB MongoDB是一个基于分布式文件存储 [1] 的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据…

Matlab基于KD树的离散点密度特征提取—点云处理及可视化第4期

在之前的文章中&#xff0c;分享了Matlab基于KD树的邻域点搜索方法&#xff1a; 在此基础上&#xff0c;进一步分享一下基于KD树的离散点密度特征提取方法。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;《Matlab点云处理及可视化》系列文章整理自作者博士期间的部分…

汇编语言与微机原理 期末半开卷复习整理(下)

输入输出 8086采用I/O端口独立编址 in AL/AX,imm8/DX out imm8/DX,AL/AX 大于0FFH的端口只能存在DX 读外设(查询) status:in al,dxtest al,80H;//测标志位jz statusmov dx,100hin al,dx写外设&#xff08;查询&#xff09; status:mov dx,102Hin al,dxtest al,80Hjnz status…

Qt实现跨平台窗口选择功能

Qt实现跨平台获取鼠标位置窗口大小功能 文章目录Qt实现跨平台获取鼠标位置窗口大小功能1、概述2、实现效果3、实现原理4、关键代码5、源代码更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;Qt自定义模块、工具&#x1f448; 1、概述 Qt版本&#xff1a…

从源码层面理解 React 是如何做 diff 的

大家好&#xff0c;我是前端西瓜哥。今天带带大家来分析 React 源码&#xff0c;理解它的单节点 diff 和多节点 diff 的具体实现。 React 的版本为 18.2.0 reconcileChildFibers React 的节点对比逻辑是在 reconcileChildFibers 方法中实现的。 reconcileChildFibers 是 Chil…

ATTCK-T1003-001-操作系统凭据转储:LSASS内存

0x01基础信息 具体信息详情ATT&CK编号T1003-001所属战术阶段凭据访问操作系统windows 7 旗舰版 SP1创建时间2022年11月17日监测平台火绒安全、火绒剑、sysmon 0x02技术原理 攻击者可能会尝试访问存储在本地安全机构子系统服务 (LSASS) 进程内存中的凭证材料。用户登录后&…

Linux文件服务配置FTP服务

作者简介&#xff1a;一名99年软件运维应届毕业生&#xff0c;正在自学云计算课程。宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。创作不易&#xff0c;动动小手…

【Python恶搞】Python实现祝福单身狗的恶搞项目,快@你的好朋友,祝福他吧 | 附源码

前言 halo&#xff0c;包子们上午好 咱就说&#xff0c;谁还没有一个单身的小伙伴呢 今天这个代码主要是为了祝福咱们单身的小伙伴 咱就说废话不多说&#xff0c;直接上才艺 相关文件 关注小编&#xff0c;私信小编领取哟&#xff01; 当然别忘了一件三连哟~~ 源码点击蓝色…

数据可视化是让信息表现更复杂?很多人可能错了

数据可视化&#xff0c;目前行业中很多人认识有些偏颇&#xff0c;数据可视化就是单纯认为是大屏展示、酷炫的图表&#xff0c;很多人仅仅是把数据可视化 作为展厅中的刚性需求而已&#xff0c;其实这个是对数据行业的偏见&#xff0c;很多人侧重于数据的表现&#xff0c;而非便…

谷歌北大扩散模型(Diffusion Model)首篇综述来了!

本综述&#xff08;Diffusion Models: A Comprehensive Survey of Methods and Applications&#xff09;来自加州大学&Google Research的Ming-Hsuan Yang、北京大学崔斌实验室以及CMU、UCLA、蒙特利尔Mila研究院等众研究团队&#xff0c;首次对现有的扩散生成模型&#xf…