DelayQueue 延迟队列

时间:2020-01-09 10:36:26  来源:igfitidea点击:

DelayQueue类实现了BlockingQueue接口。阅读BlockingQueue文本以获取有关该接口的更多信息。

DelayQueue在内部阻塞元素,直到特定的延迟到期为止。这些元素必须实现接口java.util.concurrent.Delayed。界面外观如下:

public interface Delayed extends Comparable<Delayed< {

 public long getDelay(TimeUnit timeUnit);

}

" getDelay()"方法返回的值应该是释放该元素之前剩余的延迟。如果返回0或者负值,则该延迟将被视为已过期,并且元素将在下一个DelayQueue上的take()等调用中释放。

传递给getDelay()方法的TimeUnit实例是一个枚举,用于指示应返回延迟的时间单位。TimeUnit枚举可以采用以下值:

DAYS
HOURS
MINUTES
SECONDS
MILLISECONDS
MICROSECONDS
NANOSECONDS

正如我们所看到的," Delayed"接口还扩展了" java.lang.Comparable"接口,这意味着可以将" Delayed"对象进行相互比较。这可能在DelayQueue中内部使用,以对队列中的元素进行排序,因此按其过期时间对其进行释放。

这是一个如何使用DelayQueue的例子:

public class DelayQueueExample {

    public static void main(String[] args) {
        DelayQueue queue = new DelayQueue();

        Delayed element1 = new DelayedElement();

        queue.put(element1);

        Delayed element2 = queue.take();
    }
}

DelayedElement是我创建的Delayed接口的实现。它不是java.util.concurrent包的一部分。我们必须创建自己的Delayed接口实现才能使用DelayQueue类。