阻塞队列(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队列

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】 三个因子挖掘思路 阅读详情

相关推荐

CentOS 7下kkFileView 4.4.0离线部署全攻略(含LibreOffice 7.5配置避坑指南)

本文详细介绍了在CentOS 7环境下离线部署kkFileView 4.4.0的全流程,包括LibreOffice 7.5的配置避坑指南、中文字体解决方案以及企业级运维实践。通过本指南,用户可以在内网环境中快速搭建稳定可靠的文档在线预览服务,提升办公效率。

weixin_28481133的博客 288

面试侃集合 | ArrayBlockingQueue篇

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

537

人形机器人系列——硬件介绍

人形机器人是多领域交叉技术的产物,主要由三大系统组成:感知系统、决策系统和执行系统。感知系统感知系统是人形机器人获取外界信息的途径,主要由各种传感器组成。其中,视觉传感器用于获取图像信息,如摄像头、激光雷达等;触觉传感器用于感知触碰和压力,如力/力矩传感器、声学传感器等。这些传感器收集到的信息为机器人的决策和执行提供基础。决策系统决策系统是人形机器人的大脑,负责处理和决策各种信息。它由芯片和算法组成。芯片是硬件基础,提供计算能力;算法是软件基础,用于处理和分析传感器收集到的信息,并做出相应的决策。执行系统。

liangwqi的博客 1万+

阻塞队列(消息队列)

阻塞队列(消息队列)

Krive~Irving 1442

VMware虚拟机的安装教程

VMware 虚拟机的备份与恢复是保障数据安全和业务连续性的重要措施。综上所述,VMware 虚拟机的备份与恢复策略有多种选择,企业和用户可以根据实际需求和资源情况选择适合自己的方案,以确保虚拟机数据的安全和业务的连续性。

huanghm88的专栏 2950

CentOS8安装NVIDIA显卡驱动、CUDA和Anaconda

CentOS8安装NVIDIA显卡驱动和CUDA 参考:CentOS nvidia+cuda+cudnn 安装 安装英伟达显卡驱动 1、检查是否安装了NVIDIA的GPU(硬件层面): lspci | grep -i nvidia 2、安装GCC、kernal组件、dkms等 sudo yum install gcc sudo yum install gcc-c++ sudo yum -y install kernel-devel sudo yum -y install kernel-headers s

智慧的旋风的博客 1万+

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

光电式烟雾传感器实战指南(一) 光迷宫设计与散射原理篇

本文深入解析了光电式烟雾传感器的核心部件——光迷宫的设计原理与光散射机制。文章详细阐述了如何通过精心设计的光学结构实现‘透气不透光’,并重点探讨了前向散射(尤其是135°角)在提升烟雾监测系统灵敏度与可靠性中的关键作用,为DIY爱好者提供了从理论到实践的完整指南。

weixin_29229055的博客 583

将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

elasticsearch-6.5.4集群部署(图文详细)及常见错误

目录 服务器规划 部署包下载 服务器初始化(所有节点都要操作) 内核参数修改 /etc/security/limits.conf修改 /etc/sysctl.conf文件修改 禁用selinux 关闭防火墙 创建es用户 安装jdk es部署 单节点(节点1)部署 部署包上传解压 配置文件修改 修改文件属组 部署包分发 单节点(节点2)部署 配置文件修改 修改文件属组 单节点(节点3)部署 配置文件修改 修改文件属组 启动ES集群 验证 单节点验证 查看集

夜灬狼丶 1975

Opus Clip AI技术浅析(一)

Opus Clip AI 是一款由Opus公司推出的AI视频剪辑工具,旨在通过人工智能技术简化视频编辑过程,帮助用户快速从长视频中提取精彩片段,并生成适合社交媒体分享的短视频。

m0_75253143的博客 2152

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

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

LvanNeo的专栏 1306

ABB变频器使用PROFINET IO通信模块时的激活方法

ABB变频器使用PROFINET IO通信模块时的激活方法

Robot_PLC_HMI_Automation 2732

阻塞队列BlockingQueue

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

埃泽漫笔 814

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

阻塞队列BlockingQueue解析

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

qq_65779957的博客 1114

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

阻塞队列-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

Statistics and Machine Learning Toolbox

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

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、付费专栏及课程。

余额充值