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

相关文章

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja

Nginx屏蔽服务器名称与版本信息方式(源码级修改)

《Nginx屏蔽服务器名称与版本信息方式(源码级修改)》本文详解如何通过源码修改Nginx1.25.4,移除Server响应头中的服务类型和版本信息,以增强安全性,需重新配置、编译、安装,升级时需重复... 目录一、背景与目的二、适用版本三、操作步骤修改源码文件四、后续操作提示五、注意事项六、总结一、背景与

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1