2009-07-17 32 views
0

我们需要密切关注来自Java程序的pc时钟。为此,我们每500毫秒使用scheduleAtFixedRate()安排一个Runnable。我们每次都从这里调用System.currentTimeMillis()。如果我们看到有更大的差异,那么500 ms + - 某个允许的增量,然后我们假设时钟已经改变(然后我们需要做其他一些事情)。scheduleAtFixedRate的准确度是多少?

这是否是正确的做事方式? Linux上的测试表明,在正常操作期间50毫秒增量就足够了。在Windows上,我们必须增加100 ms,否则,它认为每次检查都会改变时间。

有关如何做到这一点的任何其他想法?

回答

2

如果目标是检测时钟的变化,你可以测试当前时钟对一个知道使用绝对时间源的时间服务器引用

看看这里Java NTP client http://support.ntp.org/bin/view/Support/JavaSntpClient 更多信息,你就可以检测到时钟更改

+0

谢谢你的链接,但链接的问题已经评论说,它是一个天真的实现。 – 2009-07-17 11:46:30

0

我假设您使用类Timer和TimerTask。

也许你可以使用方法调度而不是scheduleAtFixedRate。 传递Date的方法schedule允许您为执行日期设置任务,您可以在上次执行结束时保持重新计划。 您也可以使用计划传递延迟,它不会像scheduleAtFixedRate那样执行追赶。

javadoc Timer

+1

现在Timer和TimerTask已经非常陈旧了。 ScheduledExecutorService可以完成所有这些工作。 – skaffman 2009-07-17 11:07:43

相关问题