《Java源码分析》:BlockingQueue之ArrayBlockingQueue

本文详细分析了Java并发包中的ArrayBlockingQueue,包括其继承体系、相关属性、构造方法以及核心的put和take方法的源码实现。ArrayBlockingQueue是一个有界的阻塞队列,基于数组实现,使用ReentrantLock保证线程安全,插入和取出元素的操作遵循FIFO原则。队列不允许元素为null,并提供了公平和非公平两种策略。
摘要由CSDN通过智能技术生成

《Java源码分析》:BlockingQueue

2016年8月27日21:10:51,今天是学校报道的第一天,从今天开始,我也就研三了,哎,有时候只能感叹时间过的真快,自己的研究生生活只剩下最后一年。在最后的一年里,希望自己的一切都顺利吧,其中包括:找一份好的工作,顺利将手上的项目完成,顺利完成自己的毕设。

说了这么多,还是开始本篇博文的正题吧。在前一段时间研究了下J.U.C包下面并发类库的原理,也都形成了相应的博文,唯独关于阻塞队列BlockingQueue以及它的4个实现类ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue的源码分析形成相应的博客。

今天抽空,又看了下这几个类的源码,也就做点记录并形成了这篇博文。

BlockingQueue

BlockingQueue是一个队列,还额外支持如下的操作:当获取元素时,如果队列为空,则一直等待直到队列非空。当存储元素时,如果队列中没有空间进行存储,则一直等待直到有空间进行存储。

1.BlockingQueue定义的常用方法如下:

Summary of BlockingQueue methods
Throws exception Special value Blocks Times out
Insert add(e) offer(e) put(e) offer(e, time, unit)
Remove remove() poll() take() poll(long, TimeUnit)
Examine element() peek() not applicable not applicable

上面就是BlockingQueue接口中提供的方法列表。

1、往队列中添加元素的方法有4钟,分别为:add(e)/offer(e)/put(e)/offer(e,time,unit)

2、往队列中取元素的方法有4种,分别为:remove()/poll()/take()/poll(long,TimeUnit).

3、检查队列中的元素有2种,分别为:element()/peek().

由于put()/take()方法是在并发中会发生阻塞,因此,我们以研究这两种方法的源码实现。

2、ArrayBlockingQueue

ArrayBlockingQueue是一个基于数组且有界的阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。即队列头保存的是在队列中待的时间最长的元素。队列尾则是待的时间最短的元素。元素插入到对尾,在队首获取元素。

2.1ArrayBlockingQueue继承体系结构

    public class 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值