阻塞队列(1)--ArrayBlockingQueue底层实现

1.1 ArrayBlockingQueue是什么?

1.1ArrayBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据(实际上可看作一个循环数组)。常用的操作包括 add ,offer,put,remove,poll,take,peek。

1.2 阻塞队列提供了四种处理方法:

 方法\处理方式    抛出异常        返回特殊值        一直阻塞        超时退出
 插入方法            add(e)           offer(e)                put(e)         offer(e,time,unit)
移除方法             remove()       poll()                   take()          poll(time,unit)
 检查方法            element()      peek()                  不可用        不可用

1.3 数据添加:

    1.3.1 add:

        第一步:会调用父类的方法

113118_y0iO_2495999.png

    第二步:调用offer(添加方法,下面再说),由于父类没有实现该方法,又回到ArrayBlockingQueue类中调用改方法

113228_hEat_2495999.png

    如果添加失败,即抛出异常

    1.3.2 offer:

         第一步:判断插入元素是否null

         第二步:获得重入锁

         第三步:阻塞线程

         第四步:判断当前元素数量是否已经等于最大的队列长度

         第五步:插入元素

         第六步:释放锁

    114744_vFOp_2495999.png

            插入元素详解:

                120041_2X0W_2495999.png

    1.3.2 put:

       相对于offer(),如果元素数量与队列长度相等,会阻塞线程,其他的和offer()大致相对

        130502_OAiB_2495999.png

1.4 数据删除:

   1.4.1 remove:

        131940_6erO_2495999.png

    1.4.2 poll():

        132148_nV2I_2495999.png

        132354_Gyly_2495999.png

    1.4.3 take:

    132630_77VD_2495999.png

转载于:https://my.oschina.net/lovexin/blog/1791142

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值