前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Java] BlockingQueue

[Java] BlockingQueue

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

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
      • 子接口
        • 增加的方法
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档