java 队列总结queue v3 svv.docxjava 队列总结queue v3 svv.docx  atitit. java queue 队列体系总结o7t

1. 队列概念 1

1.1. 队列的实现 数组vs链表 1

2. 队列分类 2

2.1. 顺序队列 vs 循环队列 2

2.2. 阻塞队列和非阻塞队列 2

2.3. 单端队列 vs 双端队列 2

3. 队列的基本运算 入队 出队 读队头 判队空 2

4. 常见的返回模式  可能报异常 返回布尔值 可能阻塞 3

5. java.util.Queue接口, 3

5.1. BlockingQueue 3

5.2. deque 即双端队列 3

5.2.1. BlockingDeque接口 4

6. ConcurrentLinkedQueue implements Queue 4

7. BlockingQueue阻塞队列 4

7.1. 1. ArrayBlockingQueue 5

7.2. 2. LinkedBlockingQueue 5

7.3. 3. DelayQueue 5

7.4. 4. PriorityBlockingQueue 5

7.5. SynchronousQueue 6

8. LinkedBlockingDeque 乃阻塞双端队列 6

9. 参考 6

  1. 队列概念

队列

(常用数据结构之一)

锁定

本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

  1. 队列的实现 数组vs链表
  1. 队列分

    1. 顺序队列 vs 循环队列
    2. 阻塞队列和非阻塞队列

多数生产消费模型的首选数据结构就是队列。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。

同步是阻塞模式,异步是非阻塞模式

.阻塞队列和非阻塞队列的区别:阻塞队列可以阻塞,非阻塞队列不能阻塞,只能使用队列wait(),notify()进行队列消息传送。而阻塞队列当队列里面没有值时,会阻塞直到有值输入。输入也一样,当队列满的时候,会阻塞,直到队列不为空。

  1. 单端队列 vs 双端队列

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

  1. 队列的基本运算 入队 出队 读队头 判队空

(1)初始化队列:Init_Queue(q) ,初始条件:队q 不存在。操作结果:构造了一个空队;

(2)入队操作: In_Queue(q,x),初始条件: 队q 存在。操作结果: 对已存在的队列q,插入一个元素x 到队尾,队发生变化;

(3)出队操作: Out_Queue(q,x),初始条件: 队q 存在且非空,操作结果: 删除队首元素,并返回其值,队发生变化;

(4)读队头元素:Front_Queue(q,x),初始条件: 队q 存在且非空,操作结果: 读队头元素,并返回其值,队不变;

(5)判队空操作:Empty_Queue(q),初始条件: 队q 存在,操作结果: 若q 为空队则返回为1,否则返回为0。 [

  1. 常见的返回模式  可能报异常 返回布尔值 可能阻塞
  1.  java.util.Queue接口,

在java5中新增加了java.util.Queue接口,

用以支持队列的常见操作。该接口扩展了java.util.Collection接口。
Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优
点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用
element()或者peek()方法。
值得注意的是LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

继承体系

Queue<Eextends Collection<Eextends Iterable<E>

  1. BlockingQueue
  2.  deque 即双端队列

deque 即双端队列。是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行

  1. BlockingDeque接口
  1. ConcurrentLinkedQueue implements Queue

ConcurrentLinkedQueue<Eextends AbstractQueue<Eimplements Queue<E>

  1. BlockingQueue阻塞队列

BlockingQueue不光实现了一个完整队列所具有的基本功能,同时在多线程环境下,他还自动管理了多线间的自动等待于唤醒功能,从而使得程序员可以忽略这些细节,关注更高级的功能。

阻塞实现通常使用加锁上实现...

常见BlockingQueue

在了解了BlockingQueue的基本功能后,让我们来看看BlockingQueue家庭大致有哪些成员?

首先,看看BlockingQueue提供的常用方法:

可能报异常

返回布尔值

可能阻塞

设定等待时间

入队

add(e)

offer(e)

put(e)

offer(e, timeout, unit)

出队

remove()

poll()

take()

poll(timeout, unit)

查看

element()

peek()

  • 从上表可以很明显看出每个方法的作用,这个不用多说。我想说的是: add(e) remove() element() 方法不会阻塞线程。当不满足约束条件时,会抛出IllegalStateException 异常。例如:当队列被元素填满后,再调用add(e),则会抛出异常。
  • offer(e) poll() peek() 方法即不会阻塞线程,也不会抛出异常。例如:当队列被元素填满后,再调用offer(e),则不会插入元素,函数返回false。
  • 要想要实现阻塞功能,需要调用put(e) take() 方法。当不满足约束条件时,会阻塞线程。

BlockingQueue成员详细介绍

  1. 1. ArrayBlockingQueue
  2. 2. LinkedBlockingQueue

基于链表的阻塞队列

  1. 3. DelayQueue

DelayQueue中的元素只有当其指定的延迟时间到了,才能够从队列中获取到该元素

  1. 4. PriorityBlockingQueue

基于优先级的阻塞队列(优先级的判断通过构造 函数传入的Compator对象来决定),但需要注意的是PriorityBlockingQueue并不会阻塞数据生产者,而只会在没有可消费的数据 时,阻塞数据的消费者。因此使用的时候要特别注意,生产者生产数据的速度绝对不能快于消费者消费数据的速度,否则时间一长,会最终耗尽所有的可用堆内存空 间。在实现PriorityBlockingQueue时,内部控制线程同步的锁采用的是公平锁。

    1. SynchronousQueue
  1. LinkedBlockingDeque 乃阻塞双端队列 

ArrayDeque 双向队列
LinkedBlockingDeque 阻塞双端队列
ArrayBlockingQueue 双向并发阻塞队列
LinkedBlockingQueue FIFO队列
ConcurrentLinkedQueue 基于链接节点的无界线程安全队列
PriorityBlockingQueue 带优先级的无界阻塞队列
还有很多很多,可以看看AbstractQueue, Deque有哪些实现类。

  1. 参考

java中线程队列BlockingQueue的用法-shwenwen-ITPUB博客.htm

Java并发包中的同步队列SynchronousQueue实现原理 _ 并发编程网 - ifeve.com.htm

Java多线程总结之线程安全队列Queue - 火木棉的日志 - 网易博客.htm

java 队列总结queue v3 svv.docxjava 队列总结queue v3 svv.docx atitit. java queue 队列体系总结o7t 1. 队列概念 1 1.1. 队列相关推荐

  1. Linux内核进程管理基本概念-进程、运行队列、等待队列、进程切换、进程调度

    下面简述一些基本概念,以及对内核代码做最初步的了解: 一 Linux内核进程管理基础 Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到 ...

  2. Java中的微信支付(2):API V3 微信平台证书的获取与刷新

    1. 前言 在Java 中的微信支付(1):API V3 版本签名详解一文中胖哥讲解了微信支付 V3 版本 API 的签名,当我方(你自己的服务器)请求微信支付服务器时需要根据我方的API 证书对参数 ...

  3. Java中的微信支付(1):API V3版本签名详解

    1. 前言 最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少你在开发微信支付时的踩坑.目前微信支付的 API 已经发展到V3版本,采用了流行的 Restful 风格. 微信支付V2 ...

  4. java多线程异步调用别的系统接口代码_抢先准备,40个 Java 多线程面试题及答案大汇总!...

    ↑↑↑点上方蓝字关注并标⭐「IT技术思维」 一起培养顶尖技术思维 来源:程序员共成长(id:finishbug) 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有 ...

  5. Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27

    Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27 1. Jna简单介绍1 2. Jna范例halo owrld1 3. Jna概念2 3.1. (1)需 ...

  6. java查看对象锁级别_对象级别锁 vs 类级别锁(Java)

    前言 对于多线程(并发)和Spring Boot这两块在同步进行学习中,在看到使用synchronized关键字使操作同步时,看到和C#中不一样的东西,所以这里呢,就深入学习了下,若有错误之处,还望指 ...

  7. Atitit JAVA p2p设计与总结  JXTA 2

    Atitit JAVA p2p设计与总结  JXTA 2 JXTA 2 是开放源代码 P2P 网络的第二个主要版本,它利用流行的.基于 Java 的参考实现作为构建基础.在设计方面进行了重要的修改,以 ...

  8. Atitit.Java exe bat  作为windows系统服务程序运行

    Atitit.Java exe bat  作为windows系统服务程序运行 1. 使用SC命令+srvany.exe (不错,推荐)+net start1 1.1. First 创建一个java的运 ...

  9. atitit. java jsoup html table的读取解析 总结

    atitit. java jsoup html table的读取解析 总结 1. 两个大的parser ,,,jsoup 跟个   htmlparser 1 2. 资料比较 1 3. jsoup越佳. ...

  10. Atitit Java OpenCV 捕获视频

    Atitit Java  OpenCV 捕获视频 ,打开一段视频或默认的摄像头 有两种方法,一种是在定义类的时候,一种是用open()方法. 一. 读取视频序列 OpenCV提供了一个简便易用的框架以 ...

最新文章

  1. 准备战争“软测试”之DB基础知识
  2. 【C 语言】数组 ( 数组指针 | 数组指针定义 | 直接定义 数组指针 )
  3. 对话农民丰收节交易会-农业大健康·弘本农业:功能农业扶贫
  4. Linux对包管理阐述
  5. c# 利用AForge和百度AI开发实时人脸识别
  6. php漏洞黑掉数据库,WDCPnbsp;add_user.php任意数据库添加任意用户漏洞分析
  7. idea前进和后退快捷键_PR快捷键大全(喜欢记得收藏!)
  8. 读书笔记-Java完全自学手册
  9. uploadify组件文件上传那些事
  10. IDEA打包失败解决方案
  11. JS 格式化时间字符串
  12. IP路由原理 直连路由和静态路由 路由协议
  13. 2023年辽宁大学马克思主义中国化研究考研上岸前辈备考经验指导
  14. MyBatis-Plus之面向Mapper编程
  15. MCU控制继电器的电路详解
  16. kvm切换显示不同服务器界面,让复杂变简单 体验KVM多电脑切换器
  17. POM文件配置详解(总体与单项)
  18. BlazeFace测试
  19. ACL的配置以及翻转掩码
  20. 团购网站暴信任危机:团购无效电影票

热门文章

  1. 后台填充_单元格噩梦终于有救?500多行隔行填充,我就两步!
  2. axure 发布 主页_【最新实习发布!】滴滴后台/数据产品经理实习生
  3. Linux之RedHat7如何更换yum源
  4. Github 2019 年最值得关注的数据科学项目 Virgilio(维吉尔) 中文版
  5. 1.0-并发编程-进程和线程简介
  6. LoadRunner字符串编码转换函数:lr_convert_string_encoding
  7. [ CQOI 2014 ] 数三角形
  8. C#读取或设置ScrollLock
  9. Linux备份数据 结果为0 原因:mysqldump command not found
  10. 做转移FSMO角色记录