[转]【Java】DelayQueue 的延时任务实现
来源:Kimi.ai
在Java中,DelayQueue
是一个非常有用的工具,用于实现延迟任务。以下是一个使用示例,它展示了如何使用 DelayQueue
:
基本使用示例:
- 首先,你需要创建一个实现了
Delayed
接口的类。这个类需要实现getDelay
方法,该方法返回延迟时间,以及compareTo
方法,用于确定元素在队列中的顺序。 - 然后,你可以创建
DelayQueue
的实例,并向其中添加实现了Delayed
接口的对象。 - 最后,你可以从队列中取出对象,
take
方法会阻塞直到队列中存在一个延迟时间已过期的对象。
示例代码:
public class DelayedTask implements Delayed { private long delayTime; private final long expire; public DelayedTask(long delayTime) { this.delayTime = delayTime; this.expire = System.nanoTime() + TimeUnit.NANOSECONDS.convert(delayTime, TimeUnit.MILLISECONDS); } @Override public long getDelay(TimeUnit unit) { return unit.convert(expire - System.nanoTime(), TimeUnit.NANOSECONDS); } @Override public int compareTo(Delayed other) { DelayedTask x = (DelayedTask) other; long diff = this.expire - x.expire; return (diff == 0) ? 0 : ((diff < 0) ? -1 : 1); } public void execute() { // 任务执行逻辑 } } // 使用示例 public void doExecute() { DelayQueue<DelayedTask> queue = new DelayQueue<>(); queue.put(new DelayedTask(1000)); // 1秒后执行 queue.put(new DelayedTask(3000)); // 3秒后执行 queue.put(new DelayedTask(5000)); // 5秒后执行 while (true) { DelayedTask task = queue.take(); task.execute(); } }
这个示例展示了 DelayQueue
在实际开发中的灵活性和强大功能。你可以根据自己的需求,将这些概念应用到你的项目中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!