美文网首页转载部分
阻塞队列的核心方法&对阻塞的不同处理

阻塞队列的核心方法&对阻塞的不同处理

作者: 名字是乱打的 | 来源:发表于2019-08-12 15:17 被阅读0次

阻塞队列,顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示:


阻塞队列
  • 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。
  • 当阻塞队列是满时,往队列里添加元素的操作将会被阻塞。

试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。
同样
试图往己满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程从列中移除一个或者多个元素或者完全清空队列后使队列重新变得空闲起来并后续新增

在多线程领域:所谓阻塞,在某些情况下会起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒

为什么需要BlockingQueue

好处:我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为这一切BlockingQueue都给你一手包办了.
在concurrent包发布以前,在多线程环境下,我们每个程序员都必须去自己控制这些细节,尤其还要兼顾效率和线程安全,而这会给我们的程序带来不小的复杂度.

BlockingQueue种类👇(BlockingQueue是隶属于Collection下的BlockingQueue接口,于list,set平级)
BlockingQueue核心方法

三种类型的方法,针对非法添加或者得到队列元素做的处理方式不同又分为四组,可以针对不同的需求采用不同的方法.
不同组对阻塞进行了不同的处理
关于SynchonousQueue同步队列

SynchronousQueue没有容量。
与其他BlockingQueue不同,SynchronousQueue是一个不存储元素的BlockingQueue。
每一个put操作必须要等待一个take操作,否则不能继续添加元素,反之亦然。
即生产一个就要消费一个

demo

image.png

相关文章

  • 阻塞队列的核心方法&对阻塞的不同处理

    阻塞队列,顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示: 当阻塞队列是空时,从队...

  • 阻塞队列(一)(BlockingQueue)

    阻塞队列概要 阻塞队列与我们平常接触的普通队列(list)最大的不同点,在于阻塞队列支持阻塞添加和阻塞删除方法。 ...

  • Java之BlockingQueue

    1、核心方法 2、阻塞队列的成员 3、成员详解 ArrayBlockingQueue 基于数组的阻塞队列实现,在A...

  • Java 多线程(九):ArrayBlockingQueue 与

    什么是阻塞队列? 阻塞队列与我们平常接触到的普通队列(ArrayList)的最大不同点在于阻塞队列的添加和删除方法...

  • 18.阻塞队列

    [TOC] 阻塞队列 阻塞队列首先是一种队列的数据结构,阻塞表现在此队列提供了操作数据的阻塞方法:阻塞队列提供了可...

  • 阻塞队列和线程池

    1.阻塞队列 1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。2)支持阻塞的移除...

  • 一切尽在代码中:一文阐述队列的使用JAVA

    阻塞队列如下: 关于java.util 中提供的队列的方法们: 阻塞队列包括了非阻塞队列中的大部分方法,如上五个方...

  • 阻塞队列

    阻塞队列BlockingQueue不支持插入null元素,好好了解一下阻塞队列接口设计。 了解阻塞队列的接口方法后...

  • 多线程(15) — 阻塞队列

    阻塞队列(BlockingQueue)接口继承了Queue接口,其有两个实现阻塞的方法:1. 移除阻塞:当队列为空...

  • 并发编程之并发队列

    常见的并发队列有2种:阻塞队列和非阻塞队列。阻塞队列使用锁实现,非阻塞队列使用CAS非阻塞算法实现。这2种队列都是...

网友评论

    本文标题:阻塞队列的核心方法&对阻塞的不同处理

    本文链接:https://www.haomeiwen.com/subject/lsfujctx.html