当前位置: 首页 > news >正文

《架构风清扬-Java面试系列第29讲》聊聊DelayQueue的使用场景

DelayQueue是BlockingQueue接口的一个实现类之一

这个属于基础性问题,老规矩,我们将从使用场景和代码示例来进行讲解

来,思考片刻,给出你的答案

1,使用场景

  1. 实现:延迟队列,其中元素只有在其预定时间到达后才可以从队列中取出。
  2. 场景:适用于延时任务调度,如定时任务、缓存失效处理等。

2,代码示例

import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;class DelayedItem implements Delayed {private long delayTime; // 延迟时间private long insertionTime; // 加入队列的时间public DelayedItem(long delay, TimeUnit unit) {this.delayTime = unit.toNanos(delay);this.insertionTime = System.nanoTime();}@Overridepublic long getDelay(TimeUnit unit) {return unit.convert(delayTime - (System.nanoTime() - insertionTime), TimeUnit.NANOSECONDS);}@Overridepublic int compareTo(Delayed o) {if (this == o)return 0;long diff = (getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS));return (diff == 0) ? 0 : ((diff < 0) ? -1 : 1);}@Overridepublic String toString() {return "DelayedItem";}
}public class DelayQueueExample {static final DelayQueue<DelayedItem> queue = new DelayQueue<>();public static void main(String[] args) throws InterruptedException {queue.put(new DelayedItem(5, TimeUnit.SECONDS));Thread consumer = new Thread(() -> {try {DelayedItem delayedItem = queue.take(); // 只有延迟时间到了才能取出System.out.println("Consumed after delay: " + delayedItem);} catch (InterruptedException e) {e.printStackTrace();}});consumer.start();// 等待consumer完成consumer.join();}
}

至此,关于BlockingQueue接口的关键实现类也给大伙介绍完毕了

想系统性学习更多进阶的内容,欢迎来加入我的星球

相关文章:

《架构风清扬-Java面试系列第29讲》聊聊DelayQueue的使用场景

DelayQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题&#xff0c;老规矩&#xff0c;我们将从使用场景和代码示例来进行讲解 来&#xff0c;思考片刻&#xff0c;给出你的答案 1&#xff0c;使用场景 实现&#xff1a;延迟队列&#xff0c;其中元素只有在其预定…...

说说SpringBoot自动配置原理

Spring Boot的自动配置原理可以概括为&#xff1a;通过读取jar包中的配置信息&#xff0c;并根据项目依赖和条件注解自动配置应用程序所需的bean&#xff0c;从而减少手动配置的工作量。 第一、代码入口 SpringBootApplication &#x1f447; EnableAutoConfiguration &#…...

bash: docker-compose: 未找到命令

bash: docker-compose: 未找到命令 在一台新的服务器上使用 docker-compose 命令时&#xff0c;报错说 docker-compose 命令找不到&#xff0c;在网上试了一些安装方法&#xff0c;良莠不齐&#xff0c;所以在这块整理一下&#xff0c;如何正确快速的安装 docker-compose cd…...

linux 权限和权限的设置

在Linux中&#xff0c;文件和目录的权限是一个重要的安全特性。这些权限决定了哪些用户可以读取、写入或执行某个文件或目录。以下是关于Linux权限和如何设置它们的基本信息。 权限类型 Linux中有三种基本的权限类型&#xff1a; 读取&#xff08;r&#xff09;&#xff1a;…...

基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的旅游管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…...

springboot3项目练习详细步骤(第一部分:用户业务模块)

目录 环境准备 用户模块 注册 注册接口文档 ​编辑 实现结构 Spring Validation 登录 登录的接口文档 实现登录逻辑 JWT令牌 完善登录认证 拦截器 获取用户详细信息 接口文档 Usercontroller类中编写方法接口 忽略属性返回 优化代码ThreadLocal 更新用户基本信…...

推荐算法顶会论文博客笔记合集

小小挖掘机学习笔记 https://mp.weixin.qq.com/s/rp2xXueEyT8IKvTr2Qss3A 推荐系统学习笔记 https://blog.csdn.net/wuzhongqiang/category_10128687.html SIGIR SIGIR 2022 | 推荐系统相关论文分类整理&#xff1a;8.74 https://mp.weixin.qq.com/s/vH0qJ-jGHL7s5wSn7Oy…...

DRM/RESP无法连接linux上redis的原因

问题一&#xff1a; redis.conf配置文件 进入到自己的redis软件目录 vim redis.conf 将bind 127.0.0.1 : 1 注释掉&#xff0c;改成bind 0.0.0.0&#xff0c;让远程所有ip都可以访问 将daemonize yes 守护进程&#xff0c;修改后可在后台运行 protected-mod…...

vim怎么选中多行后在头部插入#(随手记)

方法1 进入可视行模式&#xff1a; 按下 V&#xff08;大写 V&#xff09;&#xff0c;选中整行&#xff0c;包括行尾空白字符。使用 v&#xff08;小写 v&#xff09;&#xff0c;然后移动光标选择从行中间开始的多行。 插入 #&#xff1a; 选中多行后&#xff0c;使用 I&…...

Objective-C的对象复制与拷贝选项

对象复制与拷贝 文章目录 对象复制与拷贝copy与mutablecopycopy与mutablecopy的简介示例&#xff1a;不可变对象的复制可变对象的复制 NSCopying和NSMutableCopying协议深复刻和浅复刻浅拷贝&#xff08;Shallow Copy&#xff09;&#xff1a;深拷贝&#xff08;Deep Copy&…...

HTML5 中的离线缓存机制,即应用缓存(Application Cache 或 AppCache)已被废弃并正在被逐步移除

HTML5 中的离线缓存机制&#xff0c;即应用缓存&#xff08;Application Cache 或 AppCache&#xff09;已被废弃并正在被逐步移除。这是因为应用缓存存在一些设计上的缺陷和限制&#xff0c;导致它在实际应用中经常出现问题。 取而代之的是一种更强大、更灵活的技术——Servi…...

vue3+ant design实现表格数据导出Excel

提示:实现表格数据导出Excel 文章目录 前言 一、安装ant design? 二、引用ant design 1.搭建框架 2.获取表格数据 三、封装导出表格的代码 四、导出 1.获取导出地址 2.在下载导出事件中添加导出代码 五、全部代码 前言 今天终于有时间来更新文章了,最近公司项目比较紧…...

VBA_NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…...

Git === Git概述 Git安装

第1章 Git概述 Git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。 Git易于学习&#xff0c;占地面积小&#xff0c;性能极快。 它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性。其性能优于Subversion…...

Linux diff命令(比较两个文件或目录的内容差异)

文章目录 Linux diff 命令详解教程基本用法比较文件输出解释 递归比较&#xff08;-r&#xff09;示例代码 控制输出格式统一格式&#xff08;-u&#xff09;上下文格式&#xff08;-c&#xff09; 高级选项忽略所有空白差异&#xff08;-w&#xff09;仅报告文件是否不同 Linu…...

从传统到现代:水表的远程抄表革命

1.引言&#xff1a;技术驱动的转型 在过去的几十年里&#xff0c;我们的生活方式被科技的快速发展深深影响&#xff0c;其中就包括了公用设施的管理方式。传统水表的远程抄表系统就是这样一个例子&#xff0c;它将老旧的手动抄表模式转变为高效、精确的自动化系统。 2.传统水…...

视频怎么打水印?6个软件教你快速进行视频水印制作

视频怎么打水印&#xff1f;6个软件教你快速进行视频水印制作 添加水印是保护视频版权、提升视频专业性的重要手段之一。以下是六款软件&#xff0c;它们能够帮助你快速进行视频水印制作&#xff0c;让你的视频更具个性和专业性&#xff1a; 1.迅捷视频剪辑软件&#xff1a;…...

面试 Java 基础八股文十问十答第二十八期

面试 Java 基础八股文十问十答第二十八期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;动态代理是什么&am…...

Excel-VBA报错01-解决方法

【已删除的部件:部件/xl/vbaProject.bin。(Visual Basic for Applications(VBA))】 1.问题复现&#xff1a; Win10 &#xff1b;64位 &#xff1b;Office Excel 2016 打开带有宏的Excel文件&#xff0c;报错&#xff1a;【已删除的部件&#xff1a;部件/xl/vbaProject.bin。…...

php利用阿里云短信SDK实现短信发送功能

当使用PHP结合阿里云短信服务SDK来实现短信验证码登录时&#xff0c;你需要遵循以下步骤&#xff1a; 1. 注册阿里云账号并开通短信服务 首先&#xff0c;你需要有一个阿里云账号&#xff0c;并在阿里云控制台中开通短信服务&#xff08;Dysmsapi&#xff09;。 2. 获取Acce…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...