1. 延迟队列【Delay Queue】
如您所知,Java 中有许多类型的集合可用。但你听说了DelayQueue吗?它是一种特定类型的 Java 集合,它允许我们根据元素的延迟时间对元素进行排序。老实说,这是一门非常有趣的课。尽管 DelayQueue ****该类是 Java 集合的成员,但它属于 java.util.concurrent 包。它实现了BlockingQueue接口。只有当元素的时间到期时,才能从队列中取出元素。
为了使用它,首先在类里面需要实现接口中的getDelay方法Delayed。它不必是一个类——你也可以使用 Java Record。
public record DelayedEvent(long startTime, String msg) implements Delayed { public long getDelay(TimeUnit unit) { long diff = startTime - System.currentTimeMillis(); return unit.convert(diff, TimeUnit.MILLISECONDS); } public int compareTo(Delayed o) { return (int) (this.startTime - ((DelayedEvent) o).startTime); } }
假设我们想推迟元素10秒。我们只需要设置当前时间增加了10秒DelayedEvent类。
final DelayQueue<DelayedEvent> delayQueue = new DelayQueue<>(); final long timeFirst = System.currentTimeMillis() + 10000; delayQueue.offer(new DelayedEvent(timeFirst, "1")); log.info("Done"); log.info(delayQueue.take().msg());
上面可见代码的输出是什么?让我们来看看。
2. 时间格式的天数【Period of Days in Time Format】
Java 8 改进了很多时间处理 API。从这个版本的 Java 开始,在大多数情况下