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
类。