什么是阻塞队列

什么是阻塞队列:阻塞队列(BlockingQueue) 是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。

一、什么是阻塞队列

阻塞队列(BlockingQueue) 是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。

二、Java里的阻塞队列

JDK7提供了7个阻塞队列。分别是

  • ArrayBlockingQueue : 一个由数组结构组成的有界阻塞队列。
  • LinkedBlockingQueue : 一个由链表结构组成的有界阻塞队列。
  • PriorityBlockingQueue : 一个支持优先级排序的无界阻塞队列。
  • DelayQueue: 一个使用优先级队列实现的无界阻塞队列。
  • SynchronousQueue: 一个不存储元素的阻塞队列。
  • LinkedTransferQueue: 一个由链表结构组成的无界阻塞队列。
  • LinkedBlockingDeque: 一个由链表结构组成的双向阻塞队列。

三、BlockingQueue接口 与 BlockingDeque 接口

JDK提供的阻塞队列中,LinkedBlockingDeque 是一个 Deque(双向的队列),其实现的接口是 BlockingDeque;其余6个阻塞队列则是 Queue(单向队列),实现的接口是 BlockingQueue。

对于 BlockingQueue 的阻塞队列提供了四种处理方法:

  • 抛出异常: 是指当阻塞队列满时候,再往队列里插入元素,会抛出IllegalStateException(“Queue full”)异常。当队列为空时,从队列里获取元素时会抛出NoSuchElementEx·ception异常 。
  • 返回特殊值: 插入方法会返回是否成功,成功则返回true。移除方法,则是从队列里拿出一个元素,如果没有则返回null
  • 一直阻塞: 当阻塞队列满时,如果生产者线程往队列里put元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应中断退出。当队列空时,消费者线程试图从队列里take元素,队列也会阻塞消费者线程,直到队列可用。
  • 超时退出: 当阻塞队列满时,队列会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。

抛出异常 与 返回特殊值 方法的实现是一样的,只不过对失败的操作的处理不一样!通过 AbstractQueue 的源码可以发现,add(e),remove(),element() 都是分别基于 offer(),poll(),peek() 实现的

延伸阅读

Java是什么

Java 是一个通用术语,用于表示 Java 软件及其组件,包括“Java 运行时环境 (JRE)”、“Java 虚拟机 (JVM)”以及“插件”。

Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的形式和感觉,但它要比C++语言更易于使用,而且在编程时彻底采用了一种以对象为导向的方式。

文章标题:什么是阻塞队列,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/51639

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
E.ZE.Z认证作者
上一篇 2023年5月9日
下一篇 2023年5月9日

相关推荐

  • 哪里能找到开发需求文档

    以下方法可以找到开发需求文档:一、向客户或业主咨询;二、在网上搜索;三、雇用专业的文档编写人员。在开始开发项目或应用程序之前,首先应该向客户或业主咨询是否有现有的开发需求文档。 一、向客户或业主咨询 在开始开发项目或应用程序之前,首先应该向客户或业主咨询是否有现有的开发需求文档。如果客户或业主已经编…

    2023年4月16日
    47800
  • 云计算的风险有哪些

    云计算的风险有:1、认证和授权;2、管理界面漏洞;3、安全事故管理;4、应用程序的安全;5、确保数据安全。认证和授权是指在云中的数据有可能面临被未授权用户访问的风险,因为它可以从任何地方访问,需要确定用户的身份。 1、认证和授权 在云中的数据有可能面临被未授权用户访问的风险,因为它可以从任何地方访问…

    2023年1月11日
    98300
  • 订餐管理系统设计

    概述:订餐管理系统设计的核心在于提高订餐效率、保障用户体验、确保数据准确性。系统担负着多个环节的任务,包括但不限于用户操作界面设计、订单处理流程、数据存储与分析、安全保障措施。在实现用户界面设计时,着重强调的是直观性和便捷性,用户应能迅速了解菜品信息并完成订餐。一个高效的订餐管理系统能显著提升餐饮企…

    2024年1月9日
    30400
  • 项目部如何做好标准化管理

    项目部做好标准化管理的关键在于制定明确的操作流程、建立健全的管理体系、实施有效的监控机制以及持续优化改进。这当中,制定明确的操作流程尤为重要,它涉及到项目从启动到结束的每一个细节,确保项目的每个环节都能高效、有序地进行。 一、 制定明确的操作流程 在项目标准化管理中,建立一套明确、具体的操作流程是基…

    2024年4月11日
    6600
  • 项目管理相关方是指哪些

    项目管理相关方通常包括1、项目团队成员 2、客户或用户 3、项目管理人员 4、供应商或承包商 5、组织内部的其他部门 6、社会、环境以及相关的利益相关者(如政府、媒体等)。在这些相关方中,客户或用户的需求和期望具有极高的重要性,因为项目的成果必须满足其所指定的需求和预期目标,这决定了项目成功的关键维…

    2024年1月8日
    43300
  • project子项目怎么添加

    添加project子项目的步骤:1、新建project文件;2、在单元格内输入任务名称;3、输入任务名称及其他详细信息;4、创建新任务;5、降级任务;6、展开或收起任务。新建project文件需要在电脑桌面上右击鼠标,在下拉框中点击“新建”,选择“Microsoft project文档”。 一、添加…

    2023年3月26日
    1.7K00
  • 如何做项目储备库管理员

    项目储备库管理员负责维护项目资源、确保信息的准确性、监控项目状态、提供必要的文档和支持、协助项目规划和决策。主要的职责包括:建立和维护项目数据库、监督项目资源、编制和更新项目文件、确保信息共享和传递的效率、定期进行项目审计、与项目团队协作提供支持。在这些职责中,建立和维护项目数据库是核心,它要求管理…

    2024年4月11日
    6200
  • 如何提升项目部形象管理

    项目部形象管理涉及项目品牌塑造、内外部沟通、作业环境整洁、团队着装规范、文化宣传等方面。在提升项目部形象管理方面,首先要强调项目品牌塑造。这是因为项目部的品牌形象直接关系到客户和合作伙伴的信任度以及项目团队的凝聚力。项目品牌的塑造需要结合企业文化、项目目标和专业能力,进行有效的外部宣传和内部培养,打…

    2024年4月10日
    4600
  • 如何管理项目档案资料

    管理项目档案资料的关键在于组织性、可访问性、安全性、更新性,其中组织性尤为重要。组织性要求项目档案资料具有良好的分类系统,便于快速查找和使用。通过建立统一的文件命名规则与分类体系,可以有效提高项目档案的组织性,进而提升整个项目管理的效率与效果。 一、建立档案分类体系 建立档案分类体系是管理项目档案资…

    2024年4月10日
    5900
  • 网络运维工作主要内容是什么

    网络运维工作主要内容包括:1、日常工作管理;2、设备管理;3、信息安全管理;4、应用/服务管理;5、业务管理;6、资源资产管理。日常工作管理主要用于规范和明确运维人员的岗位职责和工作安排、提供绩效考核量化依据、提供解决经验与知识的积累。 1、日常工作管理 该部分主要用于规范和明确运维人员的岗位职责和…

    2023年1月31日
    2.9K00

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部