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

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

共同性:


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


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


有下面一个场景:

    

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

    

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


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



不同性:


实现方式不同:

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

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



队列中锁的实现不同:

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


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


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

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

ArrayBlockingQueue和LinkedBlockingQueue的区别及使用

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

ArrayBlockingQueue 和 LinkedBlockingQueue 对比

ArrayBlockingQueue 和 LinkedBlockingQueue 对比ArrayBlockingQueue和LinkedBlockingQueue都支持blockingQueue的概念...
  • kang389110772
  • kang389110772
  • 2016年12月19日 11:18
  • 341

ArrayBlockingQueue和LinkedBlockingQueue的使用

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

JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue

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

简析SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue

SynchronousQueue         SynchronousQueue是无界的,是一种无缓冲的等待队列,但是由于该Queue本身的特性,在某次添加元素后必须等待其他线程取走后才能...
  • mn11201117
  • mn11201117
  • 2013年03月14日 09:45
  • 14187

ArrayBlockingQueue跟LinkedBlockingQueue的区别

1.队列中的锁的实现不同        ArrayBlockingQueue中的锁是没有分离的,即生产和消费用的是同一个锁;        LinkedBlockingQueue中的锁是分离的,即...
  • z69183787
  • z69183787
  • 2015年07月21日 15:32
  • 5036

Java LinkedBlockingQueue和ArrayBlockingQueue分析

LinkedBlockingQueue是一个链表实现的阻塞队列,在链表一头加入元素,如果队列满,就会阻塞,另一头取出元素,如果队列为空,就会阻塞。 LinkedBlockingQueue内部使用R...
  • hongchangfirst
  • hongchangfirst
  • 2014年09月29日 12:09
  • 14434

ConcurrentLinkedQueue、AraayBlockingQueue、LinkedBlockingQueue 区别及使用场景

三者区别与联系:联系,三者 都是线程安全的。区别,就是 并发 和 阻塞,前者为并发队列,因为采用cas算法,所以能够高并发的处理;后2者采用锁机制,所以是阻塞的。注意点就是前者由于采用cas算法,虽...
  • fz2543122681
  • fz2543122681
  • 2016年10月03日 22:29
  • 1398

Java并发编程与技术内幕:ArrayBlockingQueue、LinkedBlockingQueue及SynchronousQueue源码解析

本文主要讲了Java中BlockingQueue的源码一、BlockingQueue介绍与常用方法BlockingQueue是一个阻塞队列。在高并发场景是用得非常多的,在线程池中。如果运行线程数目大于...
  • Evankaka
  • Evankaka
  • 2016年06月21日 09:18
  • 5161

源码解析:ArrayBlockingQueue和LinkedBlockingQueue的区别

对于ArrayBlockingQueue和LinkedBlockingQueue已经都只是知道如何使用以及他们各自的特点,没有去看看源码到底驶入实现的!因为ArrayBlockingQueue和Lin...
  • Green_shing
  • Green_shing
  • 2015年06月29日 17:11
  • 1439
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【多线程】——ArrayBlockingQueue跟LinkedBlockingQueue相比较
举报原因:
原因补充:

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