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的使用

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

BlockingQueue

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

【多线程】BlockingQueue详解

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

C++写的跨平台BlockingQueue

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

线程----BlockingQueue

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

Java线程(十三):BlockingQueue-线程的阻塞队列

BlockingQueue作为线程容器,可以为线程同步提供有力的保障,其主要用到的方法包括: add(E o); //将指定的元素添加到此队列中(如果立即可行),在成功时返回 true,其他...

java中线程队列BlockingQueue的用法

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

【死磕Java并发】-----J.U.C之阻塞队列:BlockingQueue总结

原文出处http://cmsblogs.com/ 『chenssy』 经过前面六篇博客的阐述,我想各位应该对阻塞队列BlockingQueue有了较为深入的理解,下面来一个总结,先看整个类图:Bloc...
  • chenssy
  • chenssy
  • 2017年10月04日 18:26
  • 2085

BlockingQueue的原理及使用方法

前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大...

Java阻塞队列BlockingQueue实现生产者消费者-只有代码-不讲原理

package com.thread.test; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BlockingQueue一些特性
举报原因:
原因补充:

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