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

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

Java中的DelayQueue.poll()方法及示例

DelayQueue是Java中的一种队列实现,它可以按照元素的延迟时间进行排序,延迟时间短的元素先被取出。DelayQueue实现了BlockingQueue接口,支持阻塞式数据读写。下面将介绍DelayQueue中的poll()方法及其示例。

DelayQueue.poll()方法介绍

DelayQueue中的poll()方法用于获取并删除队列中的头元素,如果队列为空,该方法返回null。由于DelayQueue中的元素已按照延迟时间排好序,因此poll()方法将返回队列中延迟时间最短的元素。

具体语法如下:

public E poll()

其中,E代表队列中的元素类型。

DelayQueue.poll()方法示例

我们可以通过下面的代码示例了解DelayQueue.poll()方法的使用:

import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

public class DelayQueueExample {

    public static void main(String[] args) throws InterruptedException {

        // 创建DelayQueue对象
        DelayQueue<DelayedElement> delayQueue = new DelayQueue<>();

        // 加入元素
        delayQueue.put(new DelayedElement("A", 3));
        delayQueue.put(new DelayedElement("B", 4));
        delayQueue.put(new DelayedElement("C", 2));

        // 获取并删除队列头元素
        DelayedElement element = delayQueue.poll();

        // 输出元素内容
        if (element != null) {
            System.out.println(element.getContent());
        }
    }
}

class DelayedElement implements Delayed {

    private long delayTime;
    private long expireTime;
    private String content;

    public DelayedElement(String content, long delayTime) {
        this.content = content;
        this.delayTime = delayTime;
        this.expireTime = System.currentTimeMillis() + delayTime * 1000;
    }

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

    @Override
    public int compareTo(Delayed o) {
        long diff = this.expireTime - ((DelayedElement) o).expireTime;
        return diff > 0 ? 1 : diff == 0 ? 0 : -1;
    }

    public String getContent() {
        return content;
    }
}

运行结果为:

C

在该示例中,我们创建了一个DelayQueue对象,并加入了三个元素。其中,元素A的延迟时间为3秒,元素B的延迟时间为4秒,元素C的延迟时间为2秒。由于元素C的延迟时间最短,因此poll()方法返回元素C,并将其从队列中删除。最后,我们将元素C的内容输出,结果为"C"。

以上就是Java中的DelayQueue.poll()方法及其使用示例。