DelayQueue的使用

具体思路:
在容器初始化的时候就创建出一个 延迟队列 然后项目启动后随即启动一个线程一直监听这个队列
手动调用接口往队列中添加任务
依赖

一个最简单的web的应用即可

项目文件结构
在这里插入图片描述
第一步:在项目启动的时候就创建出一个延迟队列

@Configuration
public class DelayQueueConfig {@Beanpublic DelayQueue delayQueue() {return new DelayQueue();}
}

第二步:项目启动后开启一个线程去监听这个队列

/*ApplicationRunner的作用--项目启动后就执行run方法*/
@Component
public class BlockingQueueConsumer implements ApplicationRunner {@Autowiredprivate DelayQueue delayQueue;@Overridepublic void run(ApplicationArguments args) {/*开启一个线程 去监听 delayQueue*/new Thread(() -> {while (true) {try {Order order = (Order) delayQueue.take();order.run();} catch (InterruptedException e) {e.printStackTrace();}}}).start();}
}

当然,还需要创建出一个能放进队列的类

public class Order implements Delayed {private String orderNo;private long time;public Order(String orderNo, long time) {this.orderNo = orderNo;this.time = time;}@Override/*getDelay--获取现在还有多久才会被消费*/public long getDelay(TimeUnit unit) {return time - System.currentTimeMillis();}@Override/*决定队列中的顺序,谁在前 谁在后*/public int compareTo(Delayed o) {Order order = (Order) o;return Long.compare(this.time, order.time);}public void run() {System.out.println("订单号:" + orderNo + "已经被消费");}
}

最后,我们可以随时调用接口添加任务

@RestController
@RequestMapping("/blockingQueue")
public class BlockingQueueController {@Autowiredprivate DelayQueue delayQueue;@GetMapping("/test")public String test() {return "success";}@GetMapping("/add")public String add() {Order order = new Order("1", 3000+System.currentTimeMillis());Order order1 = new Order("2", 5000 + System.currentTimeMillis());Order order2 = new Order("3", 1000 + System.currentTimeMillis());delayQueue.put(order);delayQueue.put(order1);delayQueue.put(order2);return "success";}
}

结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/666787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序定制开发前,应该考虑些什么?

引言 在移动互联网时代,小程序已经成为许多企业和个人推广业务、提供服务的理想平台。然而,在进行小程序定制开发之前,开发者和业务方需要细致入微地考虑一系列关键因素,以确保最终的小程序既能满足用户需求,又能够顺…

PHP入门指南:起步篇

PHP入门指南:起步篇 PHP入门指南:起步篇什么是PHP?PHP 的优点PHP 开发环境搭建选择本地服务器软件包安装PHP环境配置Web服务器和PHP测试PHP安装 第一个PHP脚本PHP基础语法标记注释变量数据类型常量条件语句循环函数 PHP入门指南:起…

Oracle Server一台价值百万的服务器内存更换过程

数据库代码敲多了,看乏了吧! 带各位DBA看看你们的数据库运行在什么样的硬件上。 1、故障现象 事发时2号位置报警 登录ILO发现内存报警 查看详细信息 查看详细报警 2、关于ORACLE 服务器DIMM 备用 默认情况下在 Oracle ILOM 中启用 DIMM 备用。由 DIMM 提…

[linux] kolla-ansible 部署的openstack 修改mariadb默认端口号

kolla-ansible 部署前修改global.yml #freezer_database_backend: "mariadb" database_port: 9306 mariadb_port: 9306如果已经部署成功,直接修改配置文件里的端口号重启是没有用的,怀疑内部做了缓存,查看openstack 使用的memcach…

yarn/npm certificate has expired

目录 报错 原因:HTTPS 证书验证失败 方法 a.检查网络安全软件:可能会拦截或修改 HTTPS 流量 b.strict-ssl:false关闭验证【临时方法】 报错 info No lockfile found. [1/4] Resolving packages... error Error: certificate has expired at TLS…

Unity类银河恶魔城学习记录1-12 PlayerComboAttack源代码 P39

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerPrimaryAttack.cs using System.Collections; using System.Collect…

音箱、功放播放HDMI音频解决方案之HDMI音频分离器HHA

HDMI音频分离器HHA简介 HDMI音频分离器HHA具有一路HDMI信号输入,转换成一路HDMI信号、一路5.1光纤音频信号、一路5.1 SPDIF/同轴音频信号和一路模拟左右声道立体声信号输出,同时还支持EDID存储及兼容HDCP功能;分辨率最高支持1920*1080p&#…

国产软件很流氓?4款没有广告的黑科技软件,白嫖党有福了

提到国产软件,许多人可能会想到一些负面的标签,如“流氓、捆绑、广告多”。然而,事实上,国内也有许多良心软件,不仅功能强大,而且完全免费。 1、原本(图片处理神器) 在日常生活中和…

国内最全的Spring Boot系列之七

• 阿里巴巴前高级研发工程师 • 三家千万级互联网企业技术顾问 • MBTI/盖洛普技术专家 • 厦门某高校外聘教师 • 51CTO特约合作讲师 • 网易云课堂签约讲师 •《深入理解设计模式》作者 一转眼马上要过年了,回首2023年,感觉自己无所事事、碌碌无…

[SWPUCTF 2021 新生赛]ez_unserialize

根据下面的user_agent和Disallow可以判断这个是在robots.txt 我们看的出来这是一个反序列化需要我们adminadmin passwdctf construct 构造方法,当一个对象被创建时调用此方法,不过unserialize()时却不会被调用 destruct 析构方法,PHP将在对象…

FastCAE合作开发项目更新:OpenFOAM求解器集成

开发内容 1. 参数化建模,可根据模型参数、块参数、样条参数生成前处理模型并进行三维展示 2. 前处理网格生成,可根据流域参数生成二维面网格或三维体网格,可调节网格基本尺寸,可设置生成棱柱层及棱柱层参数,网格加密…

Vulnhub靶机:hacksudo2 (HackDudo)

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:hacksudo2 (HackDudo)(10.0.2.44) 目标:获取靶机root权限和flag 靶机下载地址:https://download.vulnh…

【Win10下实现开机Jar启动的CICD自动化流程】

目录 在Win10下实现开机Jar启动的CICD自动化流程,可以按照以下步骤进行操作:在Win10下实现开机Jar启动的CICD自动化流程,可以按照以下步骤进行操作: 安装Java环境:确保你的计算机上已经安装Java环境,可以通过命令行运行java -version来验证Java环境是否已安装。 编写启动…

DS:时间复杂度和空间复杂度

创作不易,感谢三连! 一、算法 1.1 什么是算法 算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。…

Qt---资源文件添加

Qt—资源文件添加 Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果编写的程序需要加载特定的资源,那么将其放置在资源文件中,便不需要担心文件的缺失。 1 需求 为菜单栏设置图标&…

【OpenCV人脸检测】写了个智能锁屏小工具!人离开电脑自动锁屏

文章目录 1. 写在前面2. 设计思路3. 人脸检测4. 程序实现 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋…

人体生物钟程序设计(C语言)

前几年在本站发布过博文介绍人体生物钟程序的制作方法。后来发现上传后显示的博文有错漏,计算符号脱漏。这会误导读者。今修订整理重新发布,展示一下漂亮的界面设计。 人体生物钟也就是人体生物节律。人体生物节律是自然进化赋予生命的基本特征之一&…

基于uniapp+vue酒店宾馆客房民宿管理系统设计 微信小程序_54ybz

APP性能需求 (1)顾客在安卓APP页面各种操作可及时得到反馈。 (2)该平台是提供给多个用户使用的平台,用户使用之前需要注册登录。登录验证后,用户才可进行各种操作[10]。 (3)管理员、…

Redis客户端有哪些:你了解吗?

一、分类 Redis客户端工具是用来连接和管理redis服务器的软件,它们可以有不同的类型,如桌面客户端、web客户端和IDE插件。不同的客户端工具有各自的优缺点和特色,你可以根据你的需求和喜好选择合适的工具。 1、Redis 命令行工具 redis-cli官…

【洛谷】P1434滑雪

#include<iostream> #include<string.h> using namespace std;const int N 310; int h[N][N]; int f[N][N]; int n,m;int dx[4] {1,0,-1,0}, dy[4] {0,-1,0,1};int dp(int x,int y) {// 如果点(x,y)已经去到过了&#xff0c;直接返回结果就行if(f[x][y] ! -1) r…