[转]【Java】DelayQueue 的延时任务实现

来源:Kimi.com 

在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 2024-10-22 14:42  z5337  阅读(59)  评论(0)    收藏  举报