BlockingQueue一些特性

原创 2015年11月20日 15:20:09

特性:BlockingQueue为空时,从BlockingQueue取值的操作将会被阻断进入等待状态,直到BlockingQueue中有值才会被唤醒,

           BlockingQueue为满时,往BlockingQueue存储的操作也会被阻断进入等待状态,直到BlockingQueue不为满才会被唤醒继续操作。

可以使用此特性对其他线程控制,节约CPU资源。

BlockingQueue有四个具体的实现类,只从名字来看,可以知道各种队列的底层实现:

ArrayBlockingQueue:(数组实现的阻塞队列)
    规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小。其所含的对象是以FIFO(先入先出)顺序排序的。

LinkedBlockingQueue:(链表实现的阻塞队列)
     大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定。其所含的对象是以FIFO顺序排序的。

PriorityBlockingQueue:(按照排序规则进行排序的有序队列)
     类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的
Comparator决定的顺序。

SynchronousQueue:(放和取交替完成)
   特殊的BlockingQueue,对其的操作必须是放和取交替完成的。

LinkedBlockingQueue和ArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于ArrayBlockingQueue。

按数组格式存储的ArrayBlockingQueue要求内存连续,因此能够存储的数据量较小,支持随机访问,因此在多线程访问的时候底层实现不需要按照队列的顺序取值。

按数链表格式存储的LinkedBlockingQueue不要求内存连续,因此能够存储的数据量小,只支持顺序访问,因此在多线程访问的时候底层实现必须按照队列顺序访问线程访。


BlockingQueue及其各个实现的分析整理

前面在整理的ThreadPoolExecutor类中,有一个从提交任务到线程池分配线程执行任务,有一个队列,而这个队列采用的就是BlockingQueue。BlockingQueue实际上定义了一个接...
  • kobejayandy
  • kobejayandy
  • 2015年07月10日 18:35
  • 1570

Java多线程-工具篇-BlockingQueue(实现生产者和消费者模式)

前言:      在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序...
  • li12412414
  • li12412414
  • 2017年01月17日 09:34
  • 1320

【图解JDK源码】BlockingQueue的基本原理

BlockingQueue即阻塞队列,它算是一种将ReentrantLock用得非常精彩的一种表现,依据它的基本原理,我们可以实现Web中的长连接聊天功能,当然其最常用的还是用于实现生产者与消费者模式...
  • t894690230
  • t894690230
  • 2016年11月08日 21:27
  • 1235

BlockingQueue的使用

  • 2015年05月28日 15:23
  • 7KB
  • 下载

BlockingQueue(阻塞队列)详解

  • 2017年11月19日 23:58
  • 92KB
  • 下载

BlockingQueue

  • 2015年06月15日 13:39
  • 20KB
  • 下载

java中线程队列BlockingQueue的用法

  • 2017年04月19日 10:22
  • 45KB
  • 下载

C++写的跨平台BlockingQueue

  • 2010年02月07日 13:59
  • 160KB
  • 下载

线程----BlockingQueue

  • 2012年03月19日 18:46
  • 66KB
  • 下载

BlockingQueue的原理及使用方法

前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大...
  • Yolanda_NuoNuo
  • Yolanda_NuoNuo
  • 2017年04月10日 16:50
  • 2089
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BlockingQueue一些特性
举报原因:
原因补充:

(最多只允许输入30个字)