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不要求内存连续,因此能够存储的数据量小,只支持顺序访问,因此在多线程访问的时候底层实现必须按照队列顺序访问线程访。


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

java线程(7)——阻塞队列BlockingQueue

回顾: 阻塞队列,英文名叫BlockingQueue。首先他是一种队列,联系之前Java基础——集合中介绍的Queue与Collection,我们就很容易开始今天的阻塞队列的学习了。来看一下他们的...

BlockingQueue

The Java BlockingQueue interface in the java.util.concurrent package represents a queue which is thr...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

阻塞队列 BlockingQueue

BlockingQueue成员详细介绍 1. ArrayBlockingQueue      基于数组的阻塞队列实现,在ArrayBlockingQueue内部,维护了一个定长数组,以便缓存队列中的...

ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别

前记:   jdk官方文档(javadoc)是学习的最好,最权威的参考。 文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小...

Java Concurrent包学习之BlockingQueue

from http://blog.csdn.net/derekjiang/article/details/5330019BlockingQueue是一个接口,它从Queue继承而来,包含了Queue的...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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