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

ArrayBlockingQueue介绍

ArrayBlockingQueue介绍 ArrayBlockingQueue是最典型的有界阻塞队列,其内部是用数组存储元素的,初始化时需要指定容量大小,利用 ReentrantLock 实现线程安全...在生产者-消费者模型中使用时,如果生产速度和消费速度基本匹配的情况下,使用ArrayBlockingQueue是个不错选择;当如果生产速度远远大于消费速度,则会导致队列填满,大量生产线程被阻塞。   ...ArrayBlockingQueue的源码分析   【1】属性值 /** 队列元素数组 */ final Object[] items; /** 下一个被take,poll,peek,remove的元素位置...(int capacity) { this(capacity, false); } public ArrayBlockingQueue(int capacity, boolean fair)...= null) itrs.removedAt(removeIndex); } notFull.signal(); } ArrayBlockingQueue总结

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

ArrayBlockingQueue源码解析

今天继续分析我们JUC包,ArrayBlockingQueue显然根据名称我们就知道此类是什么,首先它的核心应该是一个数组,然后还是阻塞的,然后连起来就是使用数组做的阻塞队列了。...那么ArrayBlockingQueue阻塞的到底是什么呐?在我看来无非就是让写入的线程排队,让读取的线程进行CAS判断时候预期的元素还存在的问题。那么我们还是看看源码是怎么长得。 ?...如果我们传入的是一个队列,那么ArrayBlockingQueue会先初始化队列和锁,然后对赋值的复制块进行加锁,进行单线程运行。 ?...总结: ArrayBlockingQueue阻塞队列,使用takeIndex表示出队下标,使用putIndex作为入队队列,先进先出。在对队列的写操作的时候都进行加锁处理。...应用: ArrayBlockingQueue的使于那种先进先出的情况,比如生产者和消费者的情况。以及一些顺序要求严格的情况。

26030

ArrayBlockingQueue 核心源码分析

w=1922&h=328&f=png&s=56379] ArrayBlockingQueue is a State-Dependent class,该类只有一些先决条件才能执行操作....3.2 有参 创建具有给定(固定)容量和默认访问策略(非公平)的ArrayBlockingQueue [171a6e64608b4245?...w=2372&h=414&f=png&s=110699] 创建具有给定(固定)容量和指定访问策略的ArrayBlockingQueue [171a6e6418d91a35?...w=3052&h=1086&f=png&s=293400] 创建一个具有给定(固定)容量,指定访问策略并最初包含给定集合的元素的ArrayBlockingQueue,该元素以集合的迭代器的遍历顺序添加...w=2720&h=2604&f=png&s=420673] fair 参数 指定读写锁是否公平 公平锁,锁竞争按先来先到顺序 非公平锁,锁竞争随机 3 新增数据 ArrayBlockingQueue有不同的几个数据添加方法

37500

JDK源码分析-ArrayBlockingQueue

概述 前文「JDK源码分析-BlockingQueue」简要分析了 BlockingQueue 接口的主要方法,ArrayBlockingQueue 就是该接口的一个主要实现类,本文分析该类的常用方法实现...ArrayBlockingQueue 的类继承结构如下: ? 从 ArrayBlockingQueue 的名字大概可以猜出来,它的内部是由数组实现的,下面分析其代码实现。...代码分析 构造器 构造器 1: // 构造器 1:初始化 ArrayBlockingQueue 对象,使用给定的容量 public ArrayBlockingQueue(int capacity) {...public ArrayBlockingQueue(int capacity, boolean fair, Collection<?...ArrayBlockingQueue 是基于数组的阻塞队列实现,它在初始化时需要指定容量; 2. 内部使用了 ReentrantLock 保证线程安全; 3.

25530

java进阶|ArrayBlockingQueue源码分析

其实分析这篇文章的时候自己在想,java这门高级语言真的很好,它的特性也给了自己很多的思考,ArrayBlockingQueue源码分析完之后,我应该不在去分析java的源码了,已经写好的内容,自己会输出和分享出来...这次要分析的ArrayBlockingQueue源码或许是我对之前写的线程池的理解有所帮助一点,主要是为了回顾一下队列的使用,之前好像在分析队列的源码时自己好像说过队列在工作中没有用到过,好像线程池里面用到了队列...接下来就是分析ArrayBlockingQueue的源码了,首先自己一般都是从构造函数进行看的,每个人都有自己的一套方法去看的。...public ArrayBlockingQueue(int capacity, boolean fair) { //判断capacity是否小于等于0,若小于等于0则直接抛出异常 if (...整个ArrayBlockingQueue的源码分析到这里就结束了,自己或许后面会分享一下关于其它的内容,不再是源码的分析分享了,可能会画点图之类的吧,毕竟这也是自己在这方面需要增进的一点的,"写代码的干不过画

34910

Java集合--阻塞队列(ArrayBlockingQueue

1 ArrayBlockingQueue ArrayBlockingQueue是一个阻塞队列,底层使用数组结构实现,按照先进先出(FIFO)的原则对元素进行排序。...ArrayBlockingQueue是一个线程安全的集合,通过ReentrantLock锁来实现,在并发情况下可以保证数据的一致性。...此外,ArrayBlockingQueue的容量是有限的,数组的大小在初始化时就固定了,不会随着队列元素的增加而出现扩容的情况,也就是说ArrayBlockingQueue是一个“有界缓存区”。...接下来,我们来看看ArrayBlockingQueue的源码实现! 构造方法 在多线程中,默认不保证线程公平的访问队列。 什么叫做公平访问队列?...在ArrayBlockingQueue中,由于公平锁会降低队列的性能,因而使用非公平锁(默认)。

4.5K40

Java并发基础:ArrayBlockingQueue全面解析!

内容摘要ArrayBlockingQueue类是一个高效、线程安全的队列实现,它基于数组,提供了快速的元素访问,并支持多线程间的同步操作,作为有界队列,它能有效防止内存溢出,并通过阻塞机制平衡生产者和消费者的速度差异...主要功能ArrayBlockingQueue主要用于解决以下功能问题:**多线程间的数据共享**: 在多线程编程中,线程之间经常需要共享数据ArrayBlockingQueue作为一个线程安全的队列...**生产者-消费者协作**: ArrayBlockingQueue是实现生产者-消费者模式的理想选择,在生产者-消费者模式中,生产者产生数据放入缓冲区,而消费者从缓冲区中取走数据,ArrayBlockingQueue...类中一些主要方法的含义:**1、核心构造方法**ArrayBlockingQueue(int capacity): 创建一个具有给定容量的新的ArrayBlockingQueue实例。...ArrayBlockingQueue(int capacity, boolean fair): 创建一个具有给定容量和公平性设置的新ArrayBlockingQueue实例,如果设置为公平,等待时间最长的线程将获得访问队列的优先权

14000

JDK容器学习之Queue: ArrayBlockingQueue

基于数组阻塞队列 ArrayBlockingQueue 前面学习了基于数组的非阻塞双端队列ArrayDeque,其内部维护一个数组和指向队列头和队列尾索引的两个成员变量;本篇则探究下基于数组的阻塞队列是什么样的数据结构...Prefer 分析阻塞原理之前,先通过注释解释下ArrayBlockingQueue的使用场景 先进先出队列(队列头的是最先进队的元素;队列尾的是最后进队的元素) 有界队列(即初始化时指定的容量,就是队列最大的容量...应用场景及case 创建线程池时,通常会用到 ArrayBlockingQueue或者LinkedBlockingQueue,如 new ThreadPoolExecutor(1, 1,...0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(2)); 延迟队列也是并发安全,ArrayBlockingQueue...相比较 DelayQueue应用场景的区别主要在 有界和无界(ArrayBlockingQueue不会扩容,而DelayQueue会出现扩容) 前者队列非空就可以出队;后者则需要队列头生效(getDelay

71460

java并发队列之阻塞队列-ArrayBlockingQueue

前言 今天讲阻塞队列,阻塞队列有很多,这篇文章只讲解ArrayBlockingQueue,其他的大同小异。...简述一下其中比较重要的 ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。...下面来探讨阻塞队列的实现原理,本文以ArrayBlockingQueue为例,其他阻塞队列实现原理可能和ArrayBlockingQueue有一些差别,但是大体思路应该类似,有兴趣的朋友可自行查看其他阻塞队列的实现源码...首先来查看其构造函数: 构造方法 描述 public ArrayBlockingQueue(int capacity) 构造指定大小的有界队列 public ArrayBlockingQueue(int...extends E> c) 构造指定大小的有界队列,指定为公平或非公平锁,指定在初始化时加入一个集合 看一下ArrayBlockingQueue类中的几个成员变量: public class ArrayBlockingQueue

87820
领券