当前位置: 首页 > 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接口的关键实现类也给大伙介绍完毕了

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

http://www.lryc.cn/news/345262.html

相关文章:

  • 说说SpringBoot自动配置原理
  • bash: docker-compose: 未找到命令
  • linux 权限和权限的设置
  • 基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。
  • springboot3项目练习详细步骤(第一部分:用户业务模块)
  • 推荐算法顶会论文博客笔记合集
  • DRM/RESP无法连接linux上redis的原因
  • vim怎么选中多行后在头部插入#(随手记)
  • Objective-C的对象复制与拷贝选项
  • HTML5 中的离线缓存机制,即应用缓存(Application Cache 或 AppCache)已被废弃并正在被逐步移除
  • vue3+ant design实现表格数据导出Excel
  • VBA_NZ系列工具NZ06:VBA创建PDF文件说明
  • Git === Git概述 Git安装
  • Linux diff命令(比较两个文件或目录的内容差异)
  • 从传统到现代:水表的远程抄表革命
  • 视频怎么打水印?6个软件教你快速进行视频水印制作
  • 面试 Java 基础八股文十问十答第二十八期
  • Excel-VBA报错01-解决方法
  • php利用阿里云短信SDK实现短信发送功能
  • 承装(修、试)电力工程施工许可证四级资质可以承接多大的项目?
  • 影像图层调整图像显示效果的色彩参数汇总
  • EasyHPC - PyTorch入门教程【笔记】
  • Node.js里面 Path 模块的介绍和使用
  • 【Linux】Centos7配置JDK
  • pytorch中统计一个数在tensor中出现了几次
  • a-auto-complete 请求后端数据做模糊查询,解决下拉框选择选不上,不回显的问题
  • Leetcode—724. 寻找数组的中心下标【简单】
  • C语言 | Leetcode C语言题解之第72题编辑距离
  • AI视频教程下载:零代码创建AI智能体、AI Agents和ChatGPT的Gpts
  • 汽车之家,如何在“以旧换新”浪潮中大展拳脚?