随笔 - 750  文章 - 1  评论 - 107  阅读 - 34万

[转]【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 在实际开发中的灵活性和强大功能。你可以根据自己的需求,将这些概念应用到你的项目中。

posted on   z5337  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示