认识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。