阻塞队列(1)

阻塞队列之设计思想

阻塞队列最初来源于生产者消费者的使用场景,生产者需要往队列里面放数据,消费者需要从队列里面获取消息。后来使用场景的丰富,需要这种队列支持更为丰富的操作,比如非阻塞式获取和消费消息等。于是就诞生了如今标准的阻塞队列,JDK里面帮我们提供了丰富的组队列,开发者只要明白其原理,合理使用便可。

  1. 阻塞队列需要支持的操作
方法抛出异常返回特殊值阻塞阻塞超时退出
插入add(e)offer(e)put(e)offer(e,time,unit)
删除remove()poll()take()poll(time, unit)
查看element()peek()NoneNone

抛出异常: 如果往队列里面放置元素,队列已经满了,则抛出IllegalStateException;如果从队列里面获取元素,当队列为空时,就抛出NoSuchElementException。
返回特殊值: 如果队列已满,往队列里面放置数据,返回false;如果空队列,从队列里面获取元素,返回null。
阻塞: 线程往满队列里面放置数据,将会被阻塞,直到队列不再是满队列状态,或者响应中断退出。线程从空队列里面获取数据,将会被阻塞,知道队列里面有元素,或者响应中断退出。
阻塞超时退出: 会在阻塞队列上阻塞一定的时间,然后超过设定时间则退出。

  1. jdk中为我们准备好7个阻塞队列
    ArrayBlockingQueue: 一个由数组结构构成的有界阻塞队列
    LinkedBlockingQueue: 一个由链表结构组成的有界阻塞队列
    PriorityBlockingQueue: 一个支持优先级排序的阻塞无界阻塞队列
    DelayQueue: 一个使用PriorityBlockingQueue实现的支持时延的无界阻塞队列
    SynchronousQueue: 一个不存储元素的阻塞队列
    TransferedBlockingQueue: 一个由链表结构组成的无界阻塞队列
    TransferedBlockingDequeue: 一个由链表结构组成的双向阻塞队列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值