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
类来存储具有不同激活时间的事件的方法。