首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

BlockingQueue

BlockingQueue 介绍 BlockingQueue 是一个先进先出的队列(Queue), 并且当获取队列元素但是队列为空时,会阻塞等待队列中有元素再返回;也支持添加元素时,如果队列已满,那么等到队列可以放入新元素时再放入...BlockingQueue 对插入、删除、获取元素在不同场景下提供了不同的操作: 抛异常 返回特殊值(成功或失败) 阻塞等待 阻塞等待直至超时 插入 add(e) offer(e) put(e) offer...unit) 删除 remove() poll() take() poll(time, unit) 获取 element() peek() 无 无 我们重点关注 put 和 take 这两个阻塞操作, BlockingQueue...主要是于消费者-生产者场景的一个线程安全容器 ArrayBlockingQueue ArrayBlockingQueue 是 BlockingQueue 的一个有界队列实现,底层采取数组 并发控制采取可重入锁...是用优先队列实现的无界阻塞队列 主要属性 public class DelayQueue extends AbstractQueue implements BlockingQueue

23210
您找到你想要的搜索结果了吗?
是的
没有找到

阻塞队列 BlockingQueue

阻塞队列,英文名BlockingQueue,顾名思义,首先它是一个队列。阻塞就是说在多线程环境下,线程在某些情况下会被挂起,这就是阻塞,一旦满足条件,又会被唤醒。那么阻塞队列的阻塞体现在何处?...Collection集合继承关系图 之前我们只知道 Collection 下面有 set 和 list,其实 queue也是继承了 Collection,queue的子类就是 BlockingQueue...BlockingQueue继承关系图 ArrayBlockingQueue:按照 ArrayList 来理解,由数组结构组成的有界阻塞队列。何为有界?其实就是队列的容量。... blockingQueue = null; public Resource(BlockingQueue blockingQueue) {...this.blockingQueue = blockingQueue; } // 生产的方法 public void produce() throws Exception {

66010

BlockingQueue 阻塞队列

BlockingQueue 是一个接口,意思是这个队列在放入元素或者取出元素的过程中允许阻塞。 存入元素时,如果没有剩余容量则会阻塞,取出元素时,如果队列为空则会阻塞。...BlockingQueue可能是容量有限的。在任何给定的时间,它都可能有一个剩余容量,超过这个容量,任何额外的元素都不能在不被阻塞的情况下放置。...没有任何内在容量约束的BlockingQueue总是报告Integer.MAX_VALUE的剩余容量。 BlockingQueue实现主要用于生产者-消费者队列,但额外支持集合接口。...BlockingQueue实现是线程安全的。所有的排队方法都是通过使用内部锁或其他形式的并发控制自动实现其效果的。...BlockingQueue本身并不支持任何类型的“关闭”或“关闭”操作,以表示不再添加任何项目。这些特性的需求和使用往往依赖于实现。

49110

BlockingQueue 源码分析

学习多线程定时器时遇到 BlockingQueue 阻塞队列,当时的认识仅限于了解其是一个并发阻塞队列,不知如何使用及其原理 1....介绍 BlockingQueue 首先是一个队列,其次提供了阻塞功能。它看起来很像消息队列可让消息解耦,但其在生产者-消费者模型中通过阻塞又可使二者速度达到平衡。...使用阻塞队列无需过多考虑线程安全问题,专注业务逻辑的实现即可 BlockingQueue 有正常的队列功能,即出队与入队。...BlockingQueue 接口 BlockingQueue 接口在 Queue 的接口上添加多几个方法或重载,最常用的方法有 put 和 take(有阻塞功能) 非阻塞 阻塞线程方法...class BlockingQueueTest { public static void main(String[] args) { ArrayBlockingQueue blockingQueue

22610
领券