什么是阻塞队列

什么是阻塞队列:阻塞队列(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日

相关推荐

  • 广州数控用什么编程好

    在探讨广州数控编程的最佳选择时,可以明确地指出,1、G代码编程和2、CAM软件编程是行业内的两大主流方法。特别地,G代码编程因其直接性和灵活性,在行业中占有重要地位。G代码(Geometric Code)允许操作者直接控制数控机床的各项运动和功能,包括速度、方向以及工具选择等。这种编程方式虽然在学习…

    2024年4月27日
    700
  • cnc编程工程师叫什么

    数控编程工程师、CNC程序员、机床编程工程师是常见的称呼。这些工程师负责编写和调整数控机床的程序,确保机床能够准确高效地加工零件。数控编程工程师具有扎实的编程知识背景,对机械制造过程有深入理解,并能够根据图纸或工程师的设计意图来编写适合生产的程序。他们能够熟练操作各类数控机床,如数控铣床、车床、磨床…

    2024年4月27日
    700
  • 初中创客编程课程是什么

    初中创客编程课程主要涵盖了两个方面1、基础编程技能,和2、创新思维培养。在这两个方面中,特别需要强调的是创新思维的培养。通过学习编程,学生不仅仅是掌握了代码的书写,更重要的是通过解决问题的过程,激发了他们对科技的好奇心,培养了探索未知、解决问题的能力。这一过程非常重要,因为它教会学生如何面对挑战,如…

    2024年4月27日
    600
  • 沐阳编程网址是什么

    沐阳编程网址是专门提供编程教学资源的平台,旨在帮助初学者学习编程技能。 网站通常包含各种编程语言的教程、视频课程、实战项目和在线代码练习等资源。在这样的网站上,初学者可以通过跟随步骤学习基本的编程原理,同时也能通过项目实践来加深理解。 一、网站概况 沐阳编程网站提供了一个学习和实践编程的空间。这个平…

    2024年4月26日
    1000
  • Java开发工程师 和Java软件工程师有什么区别

    Java开发工程师与Java软件工程师这两个职位常常相互混淆,但它们之间确实存在一些差异。主体答案是两个职位在职责范围、技能要求、工作内容及发展方向上有所不同。关键核心观点包括:1、职责范围,2、技能要求,3、工作内容,及4、发展方向。在职责范围上,Java开发工程师更侧重于编写代码和实现软件功能,…

    2023年11月16日
    42400
  • 项目知识管理分类包括哪些

    项目知识管理分类包括:一、知识的来源分类;二、知识的性质分类;三、知识的形式分类;四、知识的应用分类;五、知识的转化分类。知识的来源可以分为内部知识和外部知识。内部知识是指项目团队成员在项目执行过程中积累的经验和教训。 一、知识的来源分类 知识的来源可以分为内部知识和外部知识。内部知识是指项目团队成…

    2023年4月30日
    40100
  • 津上机床用什么系统编程

    摘要 津上机床主要使用的系统编程语言是1、FANUC控制系统。FANUC系统以其高稳定性和强大的功能性,在数控机床领域占据了重要的地位。该系统支持复杂的编程技术,包括但不限于宏程序、参数编程等,使得机床操作更加高效、精确。FANUC系统不仅提供了丰富的命令集合,使得机械加工可以实现高度自动化,而且还…

    2024年4月27日
    600
  • 多开浏览器是什么

    浏览器多开,又称为浏览器分身,是指通过一个浏览器能够同时登录同一网站的多个账号而不相互影响。多开浏览器是可以在同一时间内登录多个账号,并且可以保证每个账号都是独立运行的超级浏览器,也可用于跨境电商行业多账号防关联使用。 多开浏览器是可以在同一时间内登录多个账号,并且可以保证每个账号都是独立运行的超级…

    2023年5月29日
    68100
  • 算法用什么编程

    算法可以使用多种编程语言进行实现,包括但不限于 1、Python、2、Java、3、C++ 等。其中, Python 因其简洁的语法和强大的库支持,特别适合初学者和进行数据分析、机器学习等领域的算法实现。 Python是一种高级编程语言,以其高效的高级数据结构、简单的语法和动态类型系统著称。对于算法…

    2024年4月26日
    1100
  • c++设计三种不同继承方式的意义是什么

    C++中继承是面向对象编程的一个核心概念,它使得子类可以继承和扩展父类的功能。C++提供了三种不同的继承方式: 公有继承(Public inherited)、保护继承(Protected inherited) 和 私有继承(Private inherited)。这三种继承方式在访问控制和接口继承方面…

    2023年11月13日
    40400

发表回复

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

400-800-1024

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

分享本页
返回顶部