阻塞队列(BlockingQueue)

阻塞队列BlockingQueue(FIFO) BlockingQueue接口与Queue接口【Queue 和 BlockingQueue 都是在 Java 5 中加入的】 阅读详情

**

阻塞队列(BlockingQueue)

**

什么是阻塞队列(ArrayBlockingQueue);
1,概念
阻塞队列是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会阻塞,而当队列满是,插入元素的线程会阻塞;阻塞队列常用于生产者和消费者的场景,生产者是往队列中添加元素,消费者去队列获取元素。
构造方法:
ArrayBlockingQueue< E e> list=new ArrayBlockingQueue();
因为ArrayBlockingQueue继承了BlockingQueue所以也可以使用多态的方法
BlockingQueue< E e> list=new ArrayBlockingQueue();
添加元素:**put(E e)**如果队列已满,添加的线程会被阻塞,直到队列不满
获取元素返回获取后被删除的元素:**E take()**如果队列已空,获取的线程会被阻塞,直到队列不空
在队列头部获取元素但不删除元素。包括element()和peek()方法,当队列为空时,线程会被阻塞直到它不为空

class A extends Thread{
    //生产者线程
    private BlockingQueue<String> blockingQueue;
    public A(BlockingQueue<String> blockingQueue){
        this.blockingQueue=blockingQueue;
    }
    @Override
    public void run() {
        String str[]=new String[]{
                "one",
                "two",
                "three"
        };
        for(int i=0;i<100;i++){
            try{
                Thread.sleep(1000);
                System.out.println("生产者生产资源");
                blockingQueue.put(str[i%3]);
            }catch (Exception e){
                System.out.println("添加完成");
            }
        }
    }
}
class B extends Thread{
    //生产者线程
    private BlockingQueue<String> blockingQueue;
    public B(BlockingQueue<String> blockingQueue){
        this.blockingQueue=blockingQueue;
    }
    @Override
    public void run() {
        while (true){
            try{
                Thread.sleep(1000);
                String take = blockingQueue.take();
                System.out.println(take);
                System.out.println("消费者生产资源");
            }catch (Exception e){
                System.out.println("队列为空");
            }
        }
    }
}
public class Demo01{
    public static void main(String[] args) {
        BlockingQueue<String> bq=new ArrayBlockingQueue<String>(1);
         new A(bq).start();
         new A(bq).start();
         new A(bq).start();
         new B(bq).start();
    }
}

ArrayBlockingQueue():基于数组实现的BlockingQueue队列
LinkedBlockingQueue():基于链表实现的BlockingQueue队列

2025秋招LLM大模型多模态面试题(八)- langchain完整面试题 1. **什么是 LangChain** 2. **LangChain 包含哪些核心模块** - 模型输入/输出(Model I/O) - 组件管理 - 数据处理 - 链式组合 - 记忆与上下文管理 - 外部集成 3. **一些核心概念** 4. **什么是 LangChain Agent?** 5. **什么是 LangChain model?** 6. **LangChain 包含哪些特点?** 7. **LangChain 如何使用?** - LangChai 阅读详情

相关推荐

机器人视觉伺服控制入门:从IBVS到PBVS的实战指南(附Python代码示例)

本文深入解析机器人视觉伺服控制,对比了基于图像的视觉伺服和基于位置的视觉伺服两大核心方法。通过实战案例与Python代码示例,详细阐述了从误差计算、交互矩阵到速度控制的全流程,帮助读者掌握如何利用视觉反馈实现机器人的实时闭环控制,提升其在动态环境中的作业能力。

weixin_29061997的博客 259

面试侃集合 | ArrayBlockingQueue篇

面试官:平常在工作中你都用过什么什么集合? Hydra:用过 ArrayList、HashMap,呃…没有了 面试官:好的,回家等通知吧… 不知道大家在面试中是否也有过这样的经历,工作中仅仅用过的那么几种简单的集合,被问到时就会感觉捉襟见肘。在面试中,如果能够讲清一些具有特殊的使用场景的集合工具类,一定能秀的面试官头皮发麻。于是Hydra苦学半月,再次来和面试官对线 面试官:又来了老弟,让我看看你这半个月学了些什么 Hydra:那就先从ArrayBlockingQueue 中开始聊吧,它是一个具有线程安

537

SSCardDriver.dll社会保障卡读写终端接口规范38号文接口

********************获取设备及PSAM卡信息********************//********************获取银行账户信息 ********************//********************获取设备信息********************//********************PIN校验********************//********************通用写卡********************/

广东东信智能科技有限公司的专栏 1735

阻塞队列(消息队列)

阻塞队列(消息队列)

Krive~Irving 1442

深入解析MTK DRM初始化流程:从KMS模块到组件框架

本文深入解析了联发科(MTK)平台上DRM显示框架的初始化流程。从内核模块加载、Component框架管理依赖,到核心的mtk_drm_bind函数构建KMS对象(CRTC、Plane、Encoder、Connector),最终完成DRM设备注册并创建用户空间接口。文章结合调试经验,为开发者梳理了从驱动启动到屏幕点亮的完整路径与关键排查点。

onion的博客 765

Ubuntu20.04安装Torque-6.1.2单机版(踩坑篇)

说明:PBS排队系统原先是在Centos7安装使用很顺利,但是有客户需求在Ubuntu20.04上使用,着手在Ubuntu20.04安装上安装的时候发现很多报错,并不能顺利安装,网上查找到的教程,有的说是让放弃转slurm,有的是换源安装,但是安装好的版本很低,有许多bug,不是很好用。经过自己慢慢摸索之后,改了部分配置以及源码之后,能够顺利安装,再次记录一下踩坑心得,与大家一起分享学习。如有问题,欢迎大家来撩。...............

华青水上的博客 8087

Java集合List Map Set Queue

文章目录 一、Java集合介绍 1.1 什么是集合? 1.2 集合类的继承关系 1.3 集合和数组的区别 二、Collection接口和Iterator接口 2.1 Collection接口 2.1.1 Collection接口的常用方法 2.1.2 Collection常用方法操作集合举例 2.2 Iterator接口 2.2.1 Iterator接口作用? 2.2.2 Iterator接口的常用方法 2.2.3 Iterator常用方法举例 三、List集合 3.1 List接口 3.1.1 List接

qq_43581230的博客 428

Python实现飞书机器人定时发送文本、图片等群消息

python实现飞书群自动发送告警消息

tyh_keephunger的博客 2万+

将list集合进行切割 转换为队列进行处理

将一段list集合的数据进行切割,分段进行处理 public static void main(String[] args) { final LinkedBlockingQueue&lt;Integer&gt; testQueue = new LinkedBlockingQueue&lt;Integer&gt;( 100); Random random = new R...

u010256177的专栏 5557

10.2 全栈 CRUD 工程结构搭建:Cursor 4 步初始化 + 3 层目录规范

揭示 Cursor 工程初始化中 4 个关键动作如何将 AI 上下文感知能力从 30% 提升至 85%,包括用 pnpm create 显式声明结构契约、通过 monorepo.config.json 设定 workspace 根以支持跨包类型引用、在 shared 包中固化共享类型与协议,以及后续

weixin_42545292的博客 67

boost::circular_buffer缓行缓冲区

1、circular_buffer实现了一个环形缓冲区,空间大小是固定的,当到达容器末尾时,将自动利用容器另一端的位置空间。 2、当程序需要容纳大量的元素,但多数情况下仅保存较少数量元素时可以使用circular_buffer_space_optimized,他可以有效的减少内存的占用,提高程序的运行效率。 3、主要接口: 4、实现一个生产者---消费者模式示例: #inc...

小米的修行之路 791

java中使用队列:java.util.Queue

在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。该接口扩展了java.util.Collection接口。 Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优 点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如

LvanNeo的专栏 1306

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

阻塞队列BlockingQueue

首先PriorityBlockingQueue是一个优先级队列,他不满足先进先出的概念。会将查询的数据进行排序,排序的方式就是基于插入数据值的本身。如果是自定义对象必须要实现Comparable接口才可以添加到优先级队列排序的方式是基于二叉堆实现的。底层是采用数据结构实现的二叉堆。优先级队列PriorityBlockingQueue基于二叉堆实现的。PriorityBlockingQueue是基于数组实现的二叉堆。二叉堆是什么?二叉堆就是一个完整的二叉树。任意一个节点大于父节点或者小于父节点。

埃泽漫笔 814

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

阻塞队列BlockingQueue解析

阻塞队列是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除的方法。抛出异常:当队列满时候插入元素的时候则会直接抛出异常,为空时取出元素也会抛出元素。返回特殊值:这种方式不会阻塞线程而是直接返回boolean类型的值表示是否插入成功或者移除成功一直阻塞:插入或者移除的操作不满足条件的时候会进行阻塞放入Condition的队列中直到满足条件后被唤醒超时退出:进行阻塞是含有时间限制的,超出时间之后线程则会退出方法,返回boolean类型的值JDK 7 提供了 7 个阻塞队列,如下。

qq_65779957的博客 1114

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

阻塞队列-BlockingQueue

阻塞队列 public interface BlockingQueue extends Queue{…} [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3QtabpFM-1594633540746)(C:\Users\zhangzhicheng\AppData\Roaming\Typora\typora-user-images\image-20200713171249304.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vi7rTE

qq_36744175的博客 385

BlockingQueue 阻塞队列

BlockingQueue 阻塞队列阻塞队列阻塞队列的用处BlockingQueue的架构图种类分析BlockingQueue核心方法代码 阻塞队列 阻塞:必须要阻塞/不得不阻塞 阻塞队列是一个队列,在数据结构中起的作用如下: 线程1往阻塞队列里添加元素,线程2从阻塞队列里移除元素 当队列是空的,从队列中获取元素的操作将会被阻塞。 当队列是满的,从队列中添加元素的操作将会被阻塞。 试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素。 试图向已满的队列中添加新元素的线程将会被阻塞,

Hello World 531

阻塞队列 (BlockingQueue)

说到队列, 第一时间想到的队列的特性就是: 一种 “先进先出” 的数据结构而阻塞队列是一种特殊的队列, 也继承了队列的特性: 先进先出.但是在其先进先出的特性的基础上, 阻塞队列拥有另一种特殊的功能, 顾名思义, 就是:阻塞它在普通队列的基础上额外拥有以下几个特性:如果队列为空, 执行出队列的操作, 就会阻塞, 阻塞到另一个线程往里面添加元素为止 (队列不空)如果队列满了, 执行入队列的操作, 也会阻塞, 阻塞到另一个线程从里面取走元素为止 (队列不满)

Aqua_yyds的博客 956

初识阻塞队列BlockingQueue

一、 什么是BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示: 从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出; 常用的队列主要有以下两种: 先进先出(FIFO):先插入的队列的元素也最先出队列,类似于排 队的功能。从某种程度上来说这种队列也体现了一种公平性。 后进先出(L

w137960060的博客 417

BlockingQueue阻塞队列

BlockingQueue简介 阻塞队列,顾名思义,首先它是一个队列, 通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出; 当队列是空的,从队列中获取元素的操作将会被阻塞 当队列是满的,从队列中添加元素的操作将会被阻塞 试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素 试图向已满的队列中添加新元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空,使队列变得空闲起来并后续新增 阻塞队列是一个队列,在数据结构中起的作用如下图: 线程1往阻塞队列里

我的博客 510

阻塞队列 BlockingQueue

默认情况下不保证线程公平地访问队列,所谓公平访问队列是指阻塞的线程,可以按照阻塞的先后顺序访问队列,即先阻塞的线程先访问队列。非公平性是对先等待的线程是非公平的,当队列可用时,阻塞的线程都可以争夺访问队列的资格,有可能先阻塞的线程最后才访问队列。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列中取出元素的线程。注意:如果是无界阻塞队列,队列是不可能出现满的情况的,所以使用。是一个用链表实现的有界阻塞队列,此队列的默认和最大长度为。是一个不存储元素的阻塞队列。

xingyu19911016的博客 623

阻塞队列之一:BlockingQueue汇总

一、阻塞队列介绍 转自:https://www.cnblogs.com/duanxz/p/3400003.html BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。下图是对这个原理的阐述: 一个线程往里边放,另外一个线程从里边取的一个 BlockingQueue。 一个线程将会持续生产新对象并将其插入到队列之中,直到队列达到它所能容纳的临界点。也就是说...

维 414

Java阻塞队列BlockingQueue

一、阻塞队列 阻塞队列,首先是一个队列。当阻塞队列是空时,从队列中获取元素的操作将会被阻塞;当阻塞队列是满时,往队列里添加元素的操作将会被阻塞 在多线程领域,所谓阻塞,在某些情况下挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒,我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程 二、BlockingQueue核心方法 方法类型 抛出异常 特殊值 阻塞 ...

Luck_ZZ的博客 281

阻塞队列(七):BlockingQueue 总结

阻塞队列(七):BlockingQueue 总结 经过前面六篇博客的阐述,我想各位应该对阻塞队列BlockingQueue有了较为深入的理解,下面来一个总结,先看整个类图: BlockingQueue BlockingQueue接口实现Queue接口,它支持两个附加操作:获取元素时等待队列变为非空,以及存储元素时等待空间变得可用。相对于同一操作他提供了四种机制:抛出异常、返回特殊值、阻塞等待、超...

木村的博客 393
上一篇: JDBC快速入门
下一篇: 线程组
ProgramBoy001
博客等级 码龄6年 3粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值