java 队列_百战程序员:Java并发阻塞队列

阻塞队列 (BlockingQueue)是Java util.concurrent包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空。并发包下很多高级同步类的实现都是基于BlockingQueue实现的。

812ca5864a059d91b32cc15dbc242258.png


对于许多线程问题,可以通过使用一个或多个队列以优雅且安全的方式将其形式化。使用队列可以安全地从一个线程向另一个线程传递数据。例如,银行转账程序,转账线程将转账指令对象插入一个队列中,而不是直接访问银行对象。另一个线程从队列中取出指令执行转账。只有该线程可以访问该银行对象的内部。因此就不需要同步了。
当试图向队列添加元素而队列已满,或是想从队列中移出元素而队列为空时,阻塞队列导致线程阻塞。工作者线程可以周期性地将中间结果存储到阻塞队列中。其他的工作者线程移出中间结果并进一步加以修改。队列会自动的平衡负载。在相邻的线程存在快慢的情况下会进行平衡。
Java中的阻塞队列
java.util.concurrent包提供了几种不同形式的阻塞队列,如数组阻塞队列ArrayBlockingQueue、链表阻塞队列LinkedBlockingQueue、优先级阻塞队列PriorityBlockingQueue和延时队列DelayQueue等,下面简单介绍一下这几个阻塞队列:
数组阻塞队列:ArrayBlockingQueue是一个由数组支持的有界阻塞队列,内部维持着一个定长的数据缓冲队列(该队列由数组构成),此队列按照先进先出(FIFO)的原则对元素进行排序,在构造时需要给定容量。ArrayBlockingQueue内部还保存着两个整形变量,分别标识着队列的头部和尾部在数组中的位置。
对于数组阻塞队列,可以选择是否需要公平性,所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当队列可用时,可以按照阻塞的先后顺序访问队列,即先阻塞的生产者线程,可以先往队列里插入元素,先阻塞的消费者线程,可以先从队列里获取元素。通常,公平性会使你在性能上付出代价,只有在的确非常需要的时候再使用它。
“我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。"

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

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

相关文章

select事件有哪些_Android 深入底层:Linux事件管理机制 epoll

在linux 没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在linux新的内核中,有了一种替换它的机制,就是epoll。select()和poll() IO多路复用模型select的缺点:单个进程能够监…

如何从 0 到 1 开发 PyFlink API 作业

简介: 以 Flink 1.12 为例,介绍如何使用 Python 语言,通过 PyFlink API 来开发 Flink 作业。 Apache Flink 作为当前最流行的流批统一的计算引擎,在实时 ETL、事件处理、数据分析、CEP、实时机器学习等领域都有着广泛的应用。从 F…

殷浩详解DDD:如何避免写流水账代码?

简介: 在日常工作中我观察到,面对老系统重构和迁移场景,有大量代码属于流水账代码,通常能看到开发在对外的API接口里直接写业务逻辑代码,或者在一个服务里大量的堆接口,导致业务逻辑实际无法收敛&#xff0…

小步快跑,Veeam BackupReplication v11a 重磅发布

作者 | 伍杏玲 出品 | CSDN云计算 随着企业数字化转型进入“深水区”,业务迅速发展之际也带来庞大的数据,导致管理和保护数据变得越来越复杂,给企业数字化转型带来挑战。 据 Gartner 预测,到 2024 年,全球每年由隐私…

ironpython3桌面开发_IronPython项目有了新负责人

IronPython项目有了新负责人Python .NET C摘要运行IronPython项目的社区领导职责已经交给了Alex Earl和Benedikt Eggers。之前的负责人Jeff Hardy自微软在2010年不再积极参与以来一直负责项目的运行。正文运行IronPython项目的社区领导职责已经交给了Alex Earl和Benedikt Egger…

mysql 查看表格scott_mysql查询学习第一天,针对scott

终于把牛老师的那个项目退了,以后有时间去学习自己喜欢的东西了。我喜欢写点东西,也喜欢胡扯,哈哈。算了,开始正题。scott表是Oracle官网的Demo现在学习一个新知识,学习他的Demo最好不过了。select * from emp;select …

重度使用Flutter研发模式下的页面性能优化实践

简介: 淘宝特价版是集团内应用Flutter技术场景比较多,且用户量一亿人以上的应用了。目前我们首页、详情、店铺、我的,看看短视频,及评价,设置等二级页面都在用Flutter技术搭建。一旦Flutter有性能瓶颈,重度…

蚂蚁构建服务演进史

简介: 自动化构建和CI/CD往往是相辅相成的,可以理解为,自动化构建是温饱问题,解决了温饱就会有更多的提高生产力的诉求,也就是对应的CI平台,CI/CD本篇文章不做扩展。 作者 | 琉克 来源 | 阿里技术公众号 一…

对话Satya Nadella:大规模AI模型、人机界面或将迎来大突破

编者按:1991年微软研究院成立,三十年坚持不懈的探索成就了微软研究院今天在全球计算机科研领域的位置。在接下来的10年、30年中,科研世界会呈现何种面貌?下一个技术创新的突破点在哪里?微软又将怎样持续发挥作用&#…

python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...

#!/usr/bin/env python3#coding:utf-8Created on: 2015年12月30日author: 张晓宇Email: 61411916qq.comVersion: 1.0Description: 三层菜单1、菜单一共三级即:省,市,区县2、每一级菜单输入的如果输入的是菜单里的选项则进入下级菜单3、第1级菜…

这个云原生开发的痛点你遇到了吗?

简介: 上云从来都不是一片坦途,在此过程中我们总会遇到一些困难和挑战,得益于云原生技术的日益成熟,这些问题一定会有相应的解法。 作者:纳海 背景 在云原生时代,国内外众多云厂商释放出强大的技术红利…

mysql安装pymyaql_python安装mysql的依赖包mysql-python操作

一般情况下,使用pip命令安装即可:[rootdthost27 ~]# pip install mysql-python但是在实际工作环境中,往往会安装失败,这是因为系统缺少mysql的相关依赖组件。所以必须先安装mysql-devel类的包,而且必须要对应好mysql客…

「技术人生」专题第1篇:什么是技术一号位?

前言 什么是技术一号位、有哪些关注点、怎么做技术一号位? 做了研发团队的技术 leader 以后,要处理的事情非常多,如果对自己扮演的角色没有一个清晰的认知,就会出现该做的事情没有做,不该做的事情投入了过多的精力&…

服务器之后加码存储,浪潮信息重磅发布新一代 G6 存储平台

作者 | 宋慧 出品 | CSDN云计算 提到浪潮,业界首先想到的是浪潮信息服务器占有的优势和市场份额。不过,其实浪潮在存储领域也持续深耕和发力中。据国际分析机构 Gartner 报告显示,2021 年第一季度,浪潮存储在全闪存存储、分布式存…

python中异常和错误是同一个概念吗_Python 错误与异常

2017-08-01 13:40:17在程序运行过程中,总会遇到各种各样的错误。有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。有的错误是用户输入造成的,比如让…

技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数

简介: 以传递 name 和 pwd 参数为例,分别介绍此场景在 Android 小程序和 iOS 小程序中的实现过程。 前言 在部分场景下,需要向小程序的默认接收页(pages/index/index)传递参数。 本文将以传递 name 和 pwd 参数为例&…

腾讯安全发布安全托管服务MSS,推动网络安全建设向服务驱动转变

近年来,随着黑产组织逐渐规模化、产业化,网络攻击态势愈发严峻;同时,由于DevOps、云原生等新技术的落地,以及IT架构的变化,企业研发和运营的模型随之改变,风险应对策略也越发复杂,越…

深入解读:获得 2021 Forrester 全球云数仓卓越表现者的阿里云数据仓库

简介: 阿里云在最新发布的 The Forrester Wave™: Cloud Data Warehouse, Q1 2021 全球云数据仓库技术评比中进入卓越表现者象限,成为国内唯一入选厂商。本文针对 Forrester 的报告,结合阿里云的以 MaxCompute 为核心的云数仓产品&#xff0c…

python文件替换一行_python自动化替换文件中每一行中的特有字符串

在工作中,有可能有一些场景,例如我要替换我txt文档中,所有行中包含test文字的的行内容,例如我们可以替换为空,或者某一个特定字符串呢?不多说,上代码。。def repalceString():lineList []file …

Azkaban业务流程如何转化为DataWorks业务流程

简介: 用户在迁移上云的时候,需要将云下的的Azkaban任务迁移上云,之前通过用户在DataWroks一步步创建对应的业务流程,其转化难度和转化时间都是一定的成本和时间,但如何能做到省时省力的方式迁移,为此本文提供了使用迁…