首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[Java] BlockingQueue

[Java] BlockingQueue

原创
作者头像
用户3702315
修改2021-05-20 10:46:56
修改2021-05-20 10:46:56
5110
举报
文章被收录于专栏:安卓开发安卓开发
简介

java.util.concurrent 包里的 BlockingQueue 是一个接口,继承 Queue 接口,Queue 接口继承 Collection 接口。

特性

抛出异常

特殊值

阻塞

超时

插入

add(e)

offer(e)

put(e)

offer(e, time, unit)

移除

remove()

poll()

take()

poll(time, unit)

检查

element()

peek()

不可用

不可用

解析
  1. 异常:如果试图的操作无法立即执行,抛一个异常。
  2. 特定值:如果试图的操作无法立即执行,返回一个特定的值(常常是 true / false)。
  3. 阻塞:如果试图的操作无法立即执行,该方法调用将会发生阻塞,直到能够执行。
  4. 超时:如果试图的操作无法立即执行,该方法调用将会发生阻塞,直到能够执行,但等待时间不会超过给定值,返回一个特定值以告知该操作是否成功(典型的是 true / false)。
实现类
  1. ArrayBlockingQueue:一由数组结构组成的有界阻塞队列。
  2. DelayQueue:支持延时获取元素的无界阻塞队列。
  3. LinkedBlockingQueue:由链表结构组成的有界阻塞队列。
  4. PriorityBlockingQueue:支持优先级排序的无界阻塞队列。
  5. SynchronousQueue:不存储元素的阻塞队列。
SynchronousQueue

SynchronousQueue 也是一个队列来的,但它的特别之处在于它内部没有容器,一个生产线程,当它生产产品(即 put 的时候),如果当前没有人想要消费产品(即当前没有线程执行take),此生产线程必须阻塞,等待一个消费线程调用 take 操作,take 操作将会唤醒该生产线程,同时消费线程会获取生产线程的产品(即数据传递),这样的一个过程称为一次配对过程(当然也可以先 takeput,原理是一样的)。

子接口
  1. BlockingDeque
  2. TransferQueue
增加的方法
  1. boolean add(E e)
  2. boolean contains(Object o)
  3. int drainTo(Collection<? super E> c)
  4. int drainTo(Collection<? super E> c, int maxElements)
  5. boolean offer(E e)
  6. boolean offer(E e, long timeout, TimeUnit unit)
  7. E poll(long timeout, TimeUnit unit)
  8. void put(E e)
  9. int remainingCapacity()
  10. boolean remove(Object o)
  11. E take()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 特性
  • 解析
  • 实现类
    • SynchronousQueue
    • 子接口
    • 增加的方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档