BlockingQueue 接口源码学习

2024-08-30 05:58

本文主要是介绍BlockingQueue 接口源码学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

java version “1.8.0_221”
Java™ SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot™ 64-Bit Server VM (build 25.221-b11, mixed mode)

介绍

BlockingQueue 是一个接口,并且它还继承了 Queue 接口,在继承 Queue 接口的基础上,增加了一些 阻塞式 的操作。

BlockingQueue 中的成员方法有四种形式,分别满足各个场景的需求:

Throws excepiton 抛出异常Special value 返回特定值Blocks 阻塞直到方法执行成功Times out 阻塞执行直到超时时间再放弃
Insert 插入add(e)offer(e)put(e)offer(e, time, unit)
Remove 移除remove()poll()take()poll(time,unit)
Examineelement()peek()
  • element 和 peek 仅在 Queue 接口中定义,他们都是返回表头元素,唯一不同的是当队列为空时,element() 方法会抛出 NoSuchElementException。

  • BlockingQueue 不接受 NULL 元素,否则会抛出 NullPointerException,还有就是 poll 操作失败时,会返回 NULL。

public interface BlockingQueue<E> extends Queue<E> {/**************** 插入元素 *******************/ /*** 添加元素,成功返回 true;若队列容量满,抛出 IllegalStateException 异常。当使用容量受限的队列时,推荐使用 offer(E e)*/boolean add(E e);/*** 插入成功返回 true,否则返回 false;这个方法好于 add(),add() 插入失败会抛出异常*/boolean offer(E e);/*** 空间足够时直接插入,空间不足时进行等待,直到有空间插入*/void put(E e) throws InterruptedException;/*** 带超时时间的插入,true-插入成功,false-直到超时时间过了还没有插入进去* 等待期间被 interrupted 时,抛出 InterruptedException 异常* 若某些不该添加到这个队列的元素被添加进去时,抛出 IllegalArgumentException 异常*/boolean offer(E e, long timeout, TimeUnit unit)throws InterruptedException;/**************** 删除元素 *******************/ /*** 删除表头元素,若表头元素还不可用,将等待其可用* 等待期间被 interrupted 时,抛出 InterruptedException 异常*/ E take() throws InterruptedException;/*** 带超时时间移除表头元素;若超过时间都没有移除成功,返回 null* 等待期间被 interrupted 时,抛出 InterruptedException 异常*/E poll(long timeout, TimeUnit unit)throws InterruptedException;/*** 移除队列中指定元素(可能存在一个或者多个),若队列发生了更改,返回 true。*/boolean remove(Object o);/**************** 其它方法 *******************/ /*** 返回队列在没有内存或者资源限制下,可以无阻塞地添加元素的数量,一般为 Integer.MAX_VALUE。* 由于同一时刻可能有其它线程也在操作这个队列,所以他的返回值不是一直都是可信地。*/int remainingCapacity();/*** 队列包含该元素(一个或多个, equals 比较元素是否相等)返回 true*/public boolean contains(Object o);/*** 移动队列元素到集合 c 中,这个操作比重复的 poll + add 更有效率。* 但是此过程可能发生异常,并且如果方法执行过程中,c 发生了变化,将会造成不可预知的结果。*/int drainTo(Collection<? super E> c);/*** 移动队列中 maxElements 个元素到集合 c 中*/int drainTo(Collection<? super E> c, int maxElements);}

这篇关于BlockingQueue 接口源码学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119981

相关文章

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别