Java中的延迟队列
延迟队列(DelayQueue
)
1 | private BlockingQueue<DataDelay> delayQueue = new DelayQueue<>(); |
一般需要自定义泛型,定义泛型的时候必须要重写getDelay()和compareTo(),同时根据需要重写equals()和hashCode();比如自定义类中有time字段,那么延迟队列每次都会取出最早时间的元素(小根堆)。
关于定时任务执行器的两个方法的区别
scheduleAtFixedRate()
和scheduleWithFixedDelay()
任务的执行时间间隔是按照固定的时间间隔来计算的,即使上一个任务的执行时间超过了间隔时间,下一个任务也会按照预定的时间触发。
简单来说每个任务的开始执行时间是是根据上一个任务的开始时间加上间隔时间。
scheduleWithFixedDelay()
任务的执行时间间隔是基于上一个任务完成的时间点来计算的,在上一个任务完成后,等待指定的延迟时间,然后触发下一个任务。简单来说就是每个任务的开始执行时间是基于上一个任务完成后的时间再加上间隔时间。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.