Java定时器下一次执行时间



认识Janitor,一个每天凌晨3点运行的计时器。

Timer janitorTimer = new Timer();
TimerTask janitorWorker = new Janitor(); // Extending TimerTask
long delay = TimeUtils.getMillisUntilTomorrowAt( 3L * 3600000L); // Does what it says
janitorTimer.scheduleAtFixedRate( janitorWorker, delay, 24L * 3600000L);

在某个时间点,我想知道下一次执行清洁工工人是什么时候

在Timer或TimerTask中找不到任何相关内容。感觉有些事情双方都应该知道。

TimerTask的实现中,您可以公开nextExecutionTime,然后将其与当前时间比较,请参阅Timer 中的mainLoop

在任务尚未执行的情况下,方法scheduledExecutionTime未定义。然而,在我的应用程序中,一旦调度了执行任务,这个方法实际上会在执行之前和之后返回调度时间
注意此行为是特定于设备的,未记录在案。因此,这种方法应该针对每个设备进行验证,通常不能推荐。

在TimerTask中,存在一个名为scheduledExecutionTime()的方法。它的作用是:

返回最近实际执行此任务。

参考:http://docs.oracle.com/javase/6/docs/api/java/util/TimerTask.html#scheduledExecutionTime%28%29

更新:

这是一种新的方式。

因为它有一个固定的速率,您可以调用scheduledExecutionTime(),将fixedRate值添加到其中,然后推断nextExecutionTime

最新更新