【多线程】——ArrayBlockingQueue跟LinkedBlockingQueue相比较

原创 2016年08月31日 10:12:22

共同性:


    首先介绍下这两个队列的共同特性,要知道Blocking这个词的意思,这个词为阻塞,所以顾名思义,这两个队列为阻塞队列,但是同样的也可一


把他们看成数据共享的通道。为什么这样说呢?


有下面一个场景:

    

    当服务线程(服务线程指的事不断获取队列中的消息,进行处理的线程),处理完队列中所有的消息后,如何知道下一条消息何时到来呢?

    

    BlockingQueue就很好的解决了这个问题,会让服务线程在队列为空的时候进行等待,有新的消息进入队列 后,自动将线程唤醒。这个操作是通


过Condition机制配合锁进行通知和等待的。具体内容可以下去做功课哦!



不同性:


实现方式不同:

     ArrayBlockingQueue:基于数组实现的,是有界的,必须制定队列的大小。
     

     LinkedBlockingQueue:基于链表实现的,是无界的,但是也可以指定队列的大小,默认Integer.MAX_VALUE。



队列中锁的实现不同:

 
      这两个队列中用到的锁都是显示锁,在通知和等待机制用的都是 await和signal。


      ArrayBlockingQueue:生产者和消费者用到的事同一把锁


      LinkedBlockingQueue:生产者用到的锁:putLock,消费者用到的锁:takeLock。

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

相关文章推荐

Java LinkedBlockingQueue和ArrayBlockingQueue分析

LinkedBlockingQueue是一个链表实现的阻塞队列,在链表一头加入元素,如果队列满,就会阻塞,另一头取出元素,如果队列为空,就会阻塞。 LinkedBlockingQueue内部使用R...

ArrayBlockingQueue和LinkedBlockingQueue的区别及使用

BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会...
  • USTC_Zn
  • USTC_Zn
  • 2017年02月04日 16:56
  • 1358

JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue

目的:本文通过分析JDK源码来对比ArrayBlockingQueue 和LinkedBlockingQueue,以便日后灵活使用。 1. 在Java的Concurrent包中,添加了阻塞队列Bloc...

ArrayBlockingQueue和LinkedBlockingQueue的使用

转载自:http://chenjumin.iteye.com/blog/2182322 BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有...

ArrayBlockingQueue和LinkedBlockingQueue的使用

BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会...
  • xyblog
  • xyblog
  • 2016年06月02日 11:16
  • 622

[源码]Condition的原理,简单案例(ArrayBlockingQueue),复杂案例(LinkedBlockingQueue).

Re'entrantLock lock = new ReentrantLock(fair);   Condition   notEmpty = lock.newCondition(); //返回内部...

多线程-队列ArrayBlockingQueue 、LinkedBlockingQueue

ArrayBlockingQueue一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部是在队列中存在时间最长的元素。队列的尾部是在队列中存在时间最短的元素。新元...
  • cj2580
  • cj2580
  • 2016年11月13日 14:16
  • 154

Java多线程 -- JUC包源码分析5 -- Condition/ArrayBlockingQueue/LinkedBlockingQueue/Deque/PriorityBlockingQueue

-await/signal/signalAll与wait/notify/notifyAll区别 -Condition源码分析 -各种BlockingQueue源码分析await,signal,si...

JAVA多线程之——ArrayBlockingQueue

ArrayBlockingQueueArrayBlockingQueue队列是BlockingQueue的一个子类.block是阻塞的意思。它是一个阻塞队列,array说明它的底层是基于数组实现。数组...

JAVA多线程之——LinkedBlockingQueue

LinkedBlockingQueueLinkedBlockingQueue队列跟ArrayBlockingQueue一样都实现了BlockingQueue。因此同样是阻塞队列,有三种删除和三种添加的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【多线程】——ArrayBlockingQueue跟LinkedBlockingQueue相比较
举报原因:
原因补充:

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