队列总结(四)ArrayBlockingQueue

uniapp - HBuilder提示adb: failed to install X Failure [INSTALL_ARSE_FAILED_NOT_APK:X(安装HBuilder调试基座失败) 安装HBuilderX调试基座失败,uniapp APP运行到手机adb: failed to install,Uniapp提示adb,uniapp ios 真机调试报错 uniapp安卓调试,Uniapp安装不了基座,手动安装基座,正在安装手机端HBuilder调试基座,点击运行到手机报错信息:基座无法正常安装,Uniapp-安装HBuilder调试基座失败解决方案,解决 HBuilderX 安卓基座安装失败的问题,显示adb报错,UniApp苹果真机运行调试(自定义基座,版本更新后/没有基座打开失败)如 阅读详情

ArrayBlockingQueue

比较简单,基于数组实现的有界阻塞队列。BlockingQueue接口中有介绍,所有该接口实现都是线程安全的。 所有排队方法都使用内部锁或其他形式的并发控制以原子方式实现其效果。

    public ArrayBlockingQueue(int capacity) {
        this(capacity, false);
    }
    
    public ArrayBlockingQueue(int capacity, boolean fair) {
        if (capacity <= 0)
            throw new IllegalArgumentException();
        this.items = new Object[capacity];
        lock = new ReentrantLock(fair);
        notEmpty = lock.newCondition();
        notFull =  lock.newCondition();
    }

很显然,ArrayBlockingQueue的线程安全是基于lock与condition实现的,且支持可选的公平与非公平策略,这部分知识就不在这里介绍了。

    /** The queued items */
    final Object[] items;

    /** items index for next take, poll, peek or remove */
    int takeIndex;

    /** items index for next put, offer, or add */
    int putIndex;

    /** Number of elements in the queue */
    int count;

    /** Main lock guarding all access */
    final ReentrantLock lock;

    /** Condition for waiting takes */
    private final Condition notEmpty;

    /** Condition for waiting puts */
    private final Condition notFull;

这里关注一下putIndex,takeIndex,分别对应入队和出队。
putIndex,下一个入队元素的下标,队列null或已满时置为0
takeIndex,下一次移除操作对应的元素的下标

    private void enqueue(E x) {
        // assert lock.getHoldCount() == 1;
        // assert items[putIndex] == null;
        final Object[] items = this.items;
        items[putIndex] = x;
        if (++putIndex == items.length)
            putIndex = 0;
        count++;
        notEmpty.signal();
    }
    
    private E dequeue() {
        // assert lock.getHoldCount() == 1;
        // assert items[takeIndex] != null;
        final Object[] items = this.items;
        @SuppressWarnings("unchecked")
        E x = (E) items[takeIndex];
        items[takeIndex] = null;
        if (++takeIndex == items.length)
            takeIndex = 0;
        count--;
        if (itrs != null)
            itrs.elementDequeued();
        notFull.signal();
        return x;
    }

ArrayBlockingQueue支持在迭代的过程中不通过迭代器对队列的结构做出修改(但也仅限于当前线程,迭代过程中是全称加锁的),不会抛出ConcurrentModificationException,但是迭代结果不会受影响,保持迭代开始时的数据。

关于该队列的迭代器,实现比较麻烦,不是很想去关心,暂且放下。
这个类确实比较简单,就不多写了。

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台 微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。 阅读详情

相关推荐

基于ThingsBoard+ESP8266的MQTT远程控制实战:从设备接入到仪表盘交互

本文详细介绍了基于开源物联网平台ThingsBoard与ESP8266开发板,通过MQTT协议实现远程控制的完整实战流程。从环境搭建、设备创建、仪表盘设计到核心代码编写与联调,手把手指导完成从云端到硬端的物联网闭环,为智能家居与物联网原型开发提供低成本、高效率的解决方案。

weixin_29192365的博客 332

java并发编程:ArrayBlockingQueue详解

ArrayBlockingQueue 顾名思义是基于数组的阻塞队列。数组是要指定长度的,所以使用 ArrayBlockingQueue 时必须指定长度,也就是它是一个有界队列。它实现了 BlockingQueue 接口,有着队列、集合以及阻塞队列的所有方法。ArrayBlockingQueue 是线程安全的,内部使用 ReentrantLock 来保证。ArrayBlockingQueue 支持对生产者线程和消费者线程进行公平的调度。

初念初恋的博客 2540

STM32F103C8T6板子使用说明

pcb版,把众多元器件集中到一个板子上面管理。

LYC_462857656的博客 2193

ArrayBlockingQueue

概述 ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。 线程安全是指,ArrayBlockingQueue内部通过互斥锁保护竞争资源,实现了多线程对竞争资源的互斥访问。 有界是指,ArrayBlockingQueue对应的数组是有界限的。 阻塞队列是指,多线程访问竞争资源时,当竞争资源已被某线程获取时,其他要获取该资源的线程需要阻塞等待;而且ArrayBlockingQueue是按FIFO(先进先出)原则对元素进行排序,元素都是从尾部插入到队列,从头部开始返回。 ArrayB

weixin_38910645的博客 947

Vue3集成百度实时语音识别

Vue3集成百度实时语音识别

weixin_61769998的博客 548

CAPL编程入门:从零开始掌握汽车通信脚本语言

本文详细介绍了CAPL编程的基础知识,从开发环境搭建到核心语法精要,再到总线通信实战和高级调试技巧。CAPL作为汽车通信脚本语言,专为CAN、LIN等网络协议设计,帮助工程师高效完成车载网络测试。通过实战案例和性能优化建议,读者可以快速掌握CAPL编程技能。

s1t2u3的博客 979

Java进阶篇--并发容器之ArrayBlockingQueue与LinkedBlockingQueue

它提供了put、take等方法来实现元素的添加和移除,并且在队列为空或已满时能够自动阻塞和唤醒相应的线程,以保证生产者和消费者之间的同步和协作。总之,ArrayBlockingQueue 是一种高效、线程安全的数据结构,适用于多线程环境下的生产者-消费者问题,其中生产者线程负责将元素插入队尾,消费者线程负责从队首取出元素进行处理。如果队列不为空,则获取并移除数据,并通知生产者线程。在这个例子中,我们使用了多个生产者和消费者线程,它们同时操作LinkedBlockingQueue,展示了队列的并发性质。

m0_74293254的博客 2434

网易CodeWave智能生成应用实战:5分钟搞定库存管理系统(附详细配置截图)

本文详细介绍了如何利用网易CodeWave智能生成应用在5分钟内快速构建定制化库存管理系统。通过自然语言描述需求,无需编程即可生成包含产品管理、库存预警等核心功能的应用,并支持字段微调、业务流程注入等深度优化。文章附有详细配置截图,帮助用户高效实现数字化转型。

julia4scientist的博客 888

【java队列】ArrayBlockingQueue

文章目录1、简介2、数据结构3、源码分析3.1、属性3.2、构造函数3.3、方法3.3.1、入队方法add(E e)offer(E e)offer(E e, long timeout, TimeUnit unit) 1、简介 ArrayBlockingQueue,顾名思义:基于数组的阻塞队列。数组是要指定长度的,所以使用ArrayBlockingQueue时必须指定长度,也就是它是一个有界队列。 它实现了BlockingQueue接口,有着队列、集合以及阻塞队列的所有方法,队列类图如下图所示: 既然它在J

m0_45406092的博客 1034

【26美赛E题 Passive Solar Shading】2026美赛数学建模(MCM/ICM)思路解析及代码分享

本文研究了被动太阳能遮阳(PSS)策略在建筑节能中的应用,针对Sungrove大学(低纬高温)和Borealis大学(高纬寒冷)两种典型气候条件,建立了动态太阳辐射-热平衡模型。通过优化遮阳结构(外檐长度、百叶角度)、窗户布局和内部热质量分布,实现了夏季制冷负荷降低30-40%(Sungrove)和冬季采暖负荷减少15-25%(Borealis)。创新性地采用全天候动态遮阳建模方法,结合热质量优化与储能设计,提出了可适应不同气候条件的建筑节能解决方案,为未来可持续建筑设计提供了量化框架。

一键难忘的博客 953

在 SAP Fiori 中正确配置 Group 角色:从 PFCG 分配到首页呈现的完整链路

摘要:SAP Fiori项目中,用户登录后能否看到应用往往取决于角色配置而非前端开发。关键在于通过PFCG角色将launchpad designer中创建的tile group关联到用户角色。Catalog是应用池,group是用户首页可见的工作区。正确配置后,用户会看到角色对应的默认分组,同时保留个性化调整能力。项目实施中常见问题是应用开发完成但未正确配置group与角色关联,导致业务用户无法在首页看到应用入口。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 167

java 常用并发队列- ArrayBlockingQueue

是一个线程安全的、基于数组的有界阻塞队列。它在初始化时需要指定队列的容量,一旦创建,容量就不能改变。它的实现采用了锁和条件变量来控制并发访问,并提供了线程间的安全通信机制。是 Java 并发编程中一种常用的有界阻塞队列,适合生产者-消费者模型及需要在多个线程之间安全地共享数据的场景。通过显式锁和条件变量,提供了简单而有效的线程间通信机制。尽管它有容量限制和可能的锁竞争问题,但在需要固定容量控制和阻塞操作的场景中,是一个非常实用的选择。是 Java 中常用的并发队列之一,属于阻塞队列的范畴。它是一个。

Flying_Fish_roe的博客 1652

基于Stateflow的驱动电机控制系统模式管理与安全策略研究

摘要 本文基于Stateflow状态机建模工具,研究了驱动电机控制系统的模式管理架构与安全策略实现方法。通过分析电机控制系统的工作模式,设计了包含初始化、待机、校准、对齐、运行、故障、复位七种状态的有限状态机模型,并建立了三级故障处理机制和降额保护策略。基于Simulink/Stateflow搭建的仿真模型实现了模式切换逻辑和安全管理功能,验证了系统能够正确响应各类控制事件,故障处理机制可有效保护系统安全。研究成果为电动汽车电机控制系统的工程开发提供了参考。 关键词:Stateflow;驱动电机控制;模式管

AI的内部世界的博客 58

阻塞队列之四:ArrayBlockingQueue

一、ArrayBlockingQueue简介 一个由循环数组支持的有界阻塞队列。它的本质是一个基于数组的BlockingQueue的实现。 它的容纳大小是固定的。此队列按 FIFO(先进先出)原则对元素进行排序。 队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。 新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。 这是一个典型的“有界缓存区”,固...

weixin_33840661的博客 164

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java多线程(四)———线程池任务队列ArrayBlockingQueue

上面的一篇文章,我们介绍了线程池的拒接策列,这篇文章开始我们介绍线程池任务队列中的等待队列—— ArraBlockingQueue。 先看看ArrayBlockingQueue的继承和实现的关系的图。 ArrayBlockQueue是一个有界的队列,这个队列排列元素FIFO(先进先出),其中队列元素是用一个数组来保存的,创建时指定队列的大小,创建后,容量无法改变。 从上面的图可以看到,ArrayBlockQueue是继承了AbstractQueue类,和实现了BlockingQueue接口。 看一下Abs

余韵啊 1292

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JUC(四)-阻塞队列-ArrayBlockingQueue源码分析

JUC、阻塞队列 - ArrayBlockingQueue源码分析

~奇思妙想的王多鱼的博客 184

【Java】多线程和高并发编程(四):阻塞队列(上)基础概念、ArrayBlockingQueue

阻塞队列中,如果需要线程挂起操作,判断有无数据的位置采用的是while循环 ,为什么不能换成if。生产者消费者是设计模式的一种。E走判断,发现有空余位置,可以添加数据到队列,E添加数据,走enqueue。如果判断是if,A在E释放锁资源后,拿到锁资源,直接走enqueue方法。此时A线程就是在putIndex的位置,覆盖掉之前的数据,造成数据安全问题。是基于数组实现的队列结构,数组长度不可变,必须提前设置数组长度信息。线程A,线程B,线程E,线程C。如果队列是满的, 就一直挂起,直到被唤醒,或者被中断。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

JUC系列学习(四):线程池阻塞队列BlockingQueue及其相关实现ArrayBlockingQueue、LinkedBlockingQueue

文章目录BlockingQueueBlockingQueue相关实现类ArrayBlockingQueue实现原理构造函数添加元素add/put/offer删除元素remove/take/poll其他操作peek/element等LinkedBlockingQueue实现原理构造函数静态内部类Node添加元素add/put/offer删除元素remove/take/poll其他操作peek/element等ArrayBlockingQueue、LinkedBlockingQueue的异同Synchronou

小马快跑的博客 592

死磕java concurrent包系列(四)基于AQS的条件队列彻底理解ArrayBlockingQueue

阻塞队列概览 上篇文章我们分析了AQS中的同步队列和条件队列,而ArrayBlockingQueue和LinkedBlockingQueue正是基于AQS实现的,如果对AQS和ReentrantLock的条件队列不熟悉的话,建议去看https://juejin.im/post/5c053e546fb9a049fc034924,它与我们平时接触的LinkedList和ArrayList相比,最大的特...

weixin_33711647的博客 229

线程池的三种队列区别:SynchronousQueue、LinkedBlockingQueue 和ArrayBlockingQueue

使用方法: private static ExecutorService cachedThreadPool = new ThreadPoolExecutor(4, Runtime.getRuntime().availableProcessors() * 2, 0, TimeUnit.MILLISECONDS, new SynchronousQueue&lt;&gt;(), r -&gt; ne...

无名后生 5万+

阻塞队列系列-ArrayBlockingQueue和LinkedBlockingQueue

阻塞队列(BlockingQueue)是一种特殊的队列,它在插入和移除元素时支持阻塞操作。具体来说,当队列为空时,尝试从队列中获取元素的线程会被阻塞,直到队列中有元素为止;而当队列满时,尝试向队列中添加元素的线程也会被阻塞,直到队列中有空位为止。

hdk5855的博客 2215

JAVA阻塞队列-ArrayBlockingQueue

1.概述 在JAVA中,阻塞队列算起来共有7种(如下图所示)。 数组阻塞队列(ArrayBlockingQueue) :底层基于数组的有界阻塞队列,初始化时需要指定队列大小; 链表阻塞队列(LinkedBlockingQueue) :以链表来存储元素,理论上只要存储空间够大,就是无界的; 同步阻塞队列(SynchronousQueue):队列中不存储元素,队列中放入元素后,只有该元素被消费完成,才能重修放入元素; 优先级无界阻塞队列(PriorityBlockingQueue):底层基于数组的无界队列,支

qq_33479841的博客 5498

java并发之阻塞队列ArrayBlockingQueue

一、ArrayBlockingQueue ArrayBlockingQueue 是一个用数组实现的有界阻塞队列,其内部按先进先出的原则对元素进行排序,其中put方法和take方法为添加和删除的阻塞方法,下面我们通过ArrayBlockingQueue队列实现一个生产者消费者的案例,通过该案例简单了解其使用方式 代码比较简单, Consumer 消费者和 Producer 生产者,通过ArrayBlockingQueue 队列获取和添加元素,其中消费者调用了take()方法获取元素当队列没有元素就阻塞,生

GSON的博客 4099

ArrayBlockingQueue阻塞队列

ArrayBlockingQueue阻塞队列,即有界队列代码案例+笔记+视频讲解

shijinjins的博客 1069

深度解析阻塞队列ArrayBlockingQueue

前言 前一篇 深度解析阻塞队列LinkedBlockingQueue 从底层源码和结构原理入手,较为深入的讲解了由单链表实现的阻塞队列LinkedBlockingQueue。本篇所要讲解的依然是阻塞队列,阻塞还是那个阻塞,队列还是那个队列。只是ArrayBlockingQueue使用数组实现的阻塞队列。 由于前一篇已经重点讲解了阻塞队列中,阻塞API的实现。所以本篇的重点放在ArrayBlocki...

Sicimike的博客 2202

阻塞队列ArrayBlockingQueue与LinkedBlockingQueue

本章主要介绍BlockingDeque和它的实现类ArrayBlockingQueue与LinkedBlockingQueue。

weixin_46425661的博客 1355

Java 并发队列——ArrayBlockingQueue 深入解析

是包下的一个阻塞队列,它内部由数组作为存储结构,采用FIFO(先进先出)顺序存取元素,并提供了可选的公平性控制。有界队列:队列容量在初始化时固定,无法动态扩容。线程安全:内部使用和Condition控制并发访问,保证线程安全。阻塞特性:当队列满时,生产者线程会被阻塞;当队列空时,消费者线程会被阻塞。

宋发元 843
上一篇: 队列总结(三)ArrayDeque
下一篇: 队列总结(五)LinkedBlockingQueue
MrMoving
博客等级 码龄10年 54粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值