美文网首页
队列(阻塞队列、非阻塞队列)的详解

队列(阻塞队列、非阻塞队列)的详解

作者: 深夜小码农 | 来源:发表于2023-11-05 15:41 被阅读0次

队列的详解

什么是队列?

用来存储一条条消息(线程)的容器是一个对列。 队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则

什么是阻塞队列,什么是非阻塞队列?

阻塞队列:

添加元素时,超过总数则会进行等待(阻塞)。删除元素时,队列为空则会进行等待(阻塞)。

非阻塞队列

不管什么情况下都不会阻塞。

阻塞队列都实现了 BlockingQueue接口

什么是有界队列,什么是无界队列?

有界:

有界限,大小长度受限制

无界

无限大小,其实说是无限大小,其实是有界限的,只不过超过界限时就会进行扩容,就行ArrayList 一样,在内部动态扩容

单向链表和双向链表

单向链表 :

每个元素中除了元素本身之外,还存储一个指针,这个指针指向下一个元素;。

双向链表 :

除了元素本身之外,还有两个指针,一个指针指向前一个元素的地址,另一个指针指向后一个元素的地址 。

队列常用方法

方法 作用
add 添加一个元素,返回true 如果队列已满,则抛出异常IllegalStateException
remove 移除队列头部元素,并返回该元素值 如果队列为空,则会抛出NoSuchElementException
element 获取队列头部元素 如果队列为空,则会抛出NoSuchElementException
offer 添加一个元素,返回true 如果队列已满,则返回false
poll 移除队列头部元素,并返回该元素值 如果队列已满,则返回false
peek 获取队列头部元素 如果队列已满,则返回false
put 添加一个元素 如果队列满,则阻塞
take 移除队列头部元素,并返回该元素值 如果队列满,则阻塞
阻塞队列:
ArrayBlockingQueue: 数组结构组成的有界阻塞队列
LinkedBlockingQueue:链表结构组成的有界阻塞队列
SynchronousQueue:不存储元素的阻塞队列,直接提交给线程不保存它们
PriorityBlockingQueue:支持优先级排序的无界阻塞队列
DelayQueue:使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素
LinkedTransferQueue:由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻塞方法
LinkedBlockingDeque:由链表结构组成的双向阻塞队列
非阻塞队列:
ConcurrentLinkedQueue:单向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全,内部基于节点实现
ConcurrentLinkedDeque:双向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全    
PriorityQueue:内部基于数组实现,线程不安全的队列

相关文章

  • 并发编程之并发队列

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

  • 探讨阻塞队列和线程池源码

    阻塞队列 非阻塞队列是一个先进先出的单向队列(Queue),而BlockingQueue阻塞队列实际是非阻塞队列的...

  • Java多线程之阻塞队列

    一基本概念:1:什么叫阻塞队列阻塞队列都是相对于非阻塞队列而言的,非阻塞队列就是队列不会对当前线程产生阻塞;例如当...

  • 线程池

    [TOC] 线程池 1. 并发队列:阻塞队列和非阻塞队列 区别如下: 入队: 非阻塞队列:当队列中满了的时候,放入...

  • 并发队列-无界非阻塞队列ConcurrentLinkedQueu

    一、 前言 常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一...

  • 有关java多线程的文章

    先行概念 阻塞队列和非阻塞队列 阻塞和非阻塞队列的区别概念:https://www.cnblogs.com/min...

  • java队列

    非阻塞队列 ConcurrentLinkedQueue ConcurrentLinkedQueue非阻塞无界队列C...

  • Java集合--非阻塞队列(ConcurrentLinkedQu

    1.0 非阻塞队列 在上篇中,我们讲到了阻塞队列,以及阻塞队列中的几个实现类。 本篇,我们继续对队列进行研究。而今...

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

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

  • Java阻塞队列四组API介绍

    Java阻塞队列四组API介绍 通过前面几篇文章的学习,我们已经知道了Java中的队列分为阻塞队列和非阻塞队列以及...

网友评论

      本文标题:队列(阻塞队列、非阻塞队列)的详解

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