📜  Java中的 DelayQueue iterator() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:16:22.703000             🧑  作者: Mango

Java中的 DelayQueue iterator() 方法及示例

在Java中,DelayQueue是一个无界阻塞队列,其中的元素只能在其延迟期到时才能被取出。DelayQueue常用于实现定时任务调度,比如实现定时执行的任务队列等。DelayQueue提供了一个iterator()方法,可以用于遍历DelayQueue中的元素。

方法介绍

iterator()方法返回一个迭代器,用于遍历DelayQueue中的元素。迭代器按照元素的到期时间进行排序,即先遍历最早到期的元素。

示例代码

下面是一个使用DelayQueue的示例代码:

import java.util.concurrent.*;

public class DelayedTask implements Delayed {
    private String name;
    private long delayTime;

    public DelayedTask(String name, long delayTime) {
        this.name = name;
        this.delayTime = System.currentTimeMillis() + delayTime;
    }

    @Override
    public long getDelay(TimeUnit unit) {
        return unit.convert(delayTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
    }

    @Override
    public int compareTo(Delayed o) {
        return Long.compare(this.delayTime, ((DelayedTask) o).delayTime);
    }

    public void execute() {
        System.out.println("Task " + name + " executed.");
    }

    public static void main(String[] args) throws InterruptedException {
        DelayQueue<DelayedTask> delayQueue = new DelayQueue<>();

        delayQueue.add(new DelayedTask("Task 1", 3000));
        delayQueue.add(new DelayedTask("Task 2", 5000));
        delayQueue.add(new DelayedTask("Task 3", 2000));
        delayQueue.add(new DelayedTask("Task 4", 4000));

        Iterator<DelayedTask> iterator = delayQueue.iterator();
        while (iterator.hasNext()) {
            DelayedTask task = iterator.next();
            task.execute();
        }
    }
}

在上面的示例中,我们创建了一个自定义的实现了Delayed接口的DelayedTask类,用于表示需要被延迟执行的任务。我们创建了一个DelayQueue,并向其中添加了几个DelayedTask对象。然后,我们通过调用iterator()方法获取到DelayQueue的迭代器,并使用迭代器遍历队列中的元素,并执行它们的execute()方法。

运行示例

上述示例代码的运行结果如下:

Task 3 executed.
Task 1 executed.
Task 4 executed.
Task 2 executed.

可以看到,迭代器按照元素的到期时间进行了排序,先执行延迟时间较短的任务。

希望这个介绍对你理解Java中的DelayQueue的iterator()方法及其示例有所帮助!