Java面试篇基础部分- Java中的阻塞队列

server/2024/9/25 16:00:04/

  首先队列是一种前进后出的操作结构,也就是说它只允许从队列前端进入,从队列后端退出。这个前端和后端看个人如何理解,也就是通常所说的入队和出队,队头和队尾。

  阻塞队列和一般队列的不同就在于阻塞队列是可以阻塞的,这里所说的并不是说队列中间或者队头队尾被拦截了,而是一种操作队列的线程的一种状态。在阻塞队列中,线程阻塞有两种情况。

  • 消费者阻塞:也就是说,在队列为空的时候,没有任何数据的时候,队列消费者端就会被自动阻塞,一直到有任务进入到队列之后,消费者的线程就会被自动的唤起来消费任务。
    在这里插入图片描述
  • 生产者阻塞: 在队列已经满了,或者是没有可用空间的时候,生产者端的线程都会被阻塞,直到队列中的线程被消耗,有位置进入的时候,线程被自动唤醒,并且生产数据。
    在这里插入图片描述
      二者分别对应的出队,入队操作,当队列为空的时候,出队阻塞,当队列满的时候,入队阻塞。

阻塞队列的主要操作

  阻塞队列的主要操作有插入操作和移除操作。插入操作有add()、offer()、put(),移除操作有 remove()、poll()、take() 具体如下。

  1、插入操作

  public abstract boolean add(E paramE) ;将指定的元素插入到队列中,在成功的时候返回true,如果当前没有可用的空间,就会抛出IllegalStateException。如果该元素是null,就会抛出NullPointException的异常。

java">public boolean add(E e) {// 添加元素成功,返回 trueif (offer(e))return true;// 添加元素失败,抛出异常elsethrow new IllegalStateException("Queue full");}

  public abstract boolean offer(E paramE);将指定的元素插入队列中,在成功的时候返回true,如果没有可以用的空间,则返回false。源码如下

java"> public boolean offer(E e) {// 检查元素是否为空checkNotNull(e);final ReentrantLock lock = this.lock;// 获取锁操作lock.lock();try {// 如果队列满了,则返回falseif (count == items.length)return false;else {// 如果队列为空,则将元素加入到队列中enqueue(e);return true;}} finally {// 操作成功释放锁lock.unlock();}}

  offer(E o,long timeout,TimeUnit unit);将指定的元素插入到队列中,可以设置等待时间,如果在设定的等待时间内不能向队列中加入这个元素,就会返回false

java">public boolean offer(E e, long tim

http://www.ppmy.cn/server/121894.html

相关文章

UnLua扩展接口

一、在蓝图中创建接口 1、创建BlueprintInterface 2、声明接口函数 3、继承接口 注意,接口不需要绑定Lua,也没有Bind按钮 二、在Lua中实现接口函数 1、实现接口函数 BP_Player.lua function BP_Player_C:UpdateAiming(IsAiming)if IsAiming thensel…

获取douyin商品详情:API接口的力量

什么是DouYin商品详情API? douyin商品详情API是douyin开放平台提供的一项服务,允许开发者通过编程方式获取douyin商品的详细信息。这些信息通常包括商品的标题、价格、销量、描述、图片等。 API返回值说明 商品详情API返回的数据通常包括以下字段&…

12.Java基础概念-面向对象-static

欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words! 一、static关键字的含义…

C++——关联式容器(4):set和map

在接触了诸如二叉搜索树、AVL树、红黑树的树形结构之后,我们对树的结构有了大致的了解,现在引入真正的关联式容器。 首先,先明确了关联式容器的概念。我们之前所接触到的如vector、list等容器,我们知道他们实际上都是线性的数据结…

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题 2024/9/21 10:40 缘起:常见的问题,你下载视频的时候,4K分辨率的视频播放的时候出现偏色异常,但是1080p分辨率的正常呀! 偏色的识别&…

mysql性能优化-延迟写和异步写优化

MySQL 性能优化中的延迟写和异步写优化是数据库写入操作中非常重要的技术手段。这些技术可以有效减少磁盘 I/O 操作、提高数据库的吞吐量和整体性能。尤其是在高并发写操作场景下,通过优化写入过程,减少阻塞和等待时间,可以大幅度提升系统的响…

【前端学习】前端权限--cookie、token、session、JWT

即前端存储cookie相关内容,又看到了token,session,JWT感觉有点混乱了 一. 授权、鉴权与身份验证 首先搞清楚鉴权,授权和身份验证 身份验证(authentication): 确认用户的身份,需要用户提供证明自己身份的凭…

Git - 版本管理

本文我们来介绍下 Git 管理版本的几个常用命令。 ‍ git log:查看提交日志 随着对文件的不断修改与提交,Git 帮我们管理了之前的各个版本。就好比玩一个能存档的游戏,每过一关就能帮我们存档,如果某一关没打过,就可…