BlockingQueue的学习笔记(一)

  • 初探 BlockingQueue
    BlockingQueue是一个 接口

    
    只有 take()和put()方法会阻塞队列,其他方法都不会。

  • 实现了BlockingQueue接口的类
    LinkedBlockingQueue
    LinkedBlockingDeque
    ArrayBlockingQueue

    从类名就能看出,前两者都是链表结构,第三者是数组结构(支持随机访问)。其中第二个和第一个的区别在于:deque是双向队列。
    
     特别注意,BlockingQueue不支持null存取!这与Queue不同。

  • ArrayBlockingQueue的插入简单分析 
    这是ArrayBlockingQueue的域,items、takeIndex、putIndex、count都是用于队列常规操作的,lock和condition用于线程管理。队列是循环使用的,例如:队列长度为10(下标从0到9),现在9放了一个元素,下一个元素放的位置就将是0。
    
    ArrayBlockingQueue的构造函数,要求为items指明大小。还有一个fair参数,表明是否采用公平策:等待最长时间的线程会优先得到响应。

    下面看看队列两个常用的操作,插入元素和删除元素。

    插入元素:

    元素插入后,会调用notEmpty.signal(),随机唤醒一个因notEmpty条件而阻塞的线程(而不是signalAll)。


    比对offer()方法和put()方法,可以看到两种插入方式的不同。前者当队列满时,只是返回一个false表示插入失败,后者会在notFull条件上等待(阻塞线程)。





    


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值