15-运用带延迟元素的线程安全列表
7.5 运用带延迟元素的线程安全列表
DelayQueue 类是Java并发包中一个非常独特有趣的API。该类可以存储带有激活时间的元素,而它获取元素的方法会自动忽略在未来会出现的元素。这些未来出现的元素对于获取元素的方法来说是不可见的。为了实现该代码逻辑,存储 DelayQueue 类中的元素时就必须实现一个 Delayed 接口。该接口不仅让元素具备延迟出现的特性,还提供 getDelay() 方法来获取当前时间与激活时间之差,同时还会要求实现以下两个方法。
compareTo(Delayed o):Delayed接口继承了Comparable接口。如果调用该方法的对象延迟值比方法的参数更小,则该方法会返回负数;反之,如果调用该方法的对象延迟值比方法的参数更大,则该方法会返回正数;如果调用该方法的对象延迟值与方法的参数相等;则该方法会返回0。getDelay(TimeUnit unit):该方法必须返回一个当前时间与激活时间的差值。TimeUnit类是一个枚举类,用来指定该方法返回值的时间单位——它包含若干个枚举常量,如DAYS、HOURS、MICROSECONDS、MILLISECONDS、MINUTES、NANOSECONDS和SECONDS。
在本案例中,我们将介绍用 DelayQueue 类来存储具有不同激活时间的事件的方法。