scheduleAtFixedRate的准确度是多少?

时间:2009-07-17 10:08:23

标签: java

我们需要关注Java程序中的pc时钟。为此,我们每隔500毫秒使用scheduleAtFixedRate()安排一个Runnable。我们每次都会调用System.currentTimeMillis()。如果我们看到存在更大的差异然后500 ms + - 某个允许的增量,那么我们假设时钟已经改变(那么我们需要做其他一些事情)。

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

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

2 个答案:

答案 0 :(得分:2)

如果目标是检测时钟变化,您可以根据已知的时间服务器参考

测试当前时钟

在此处查找更多信息Java NTP client http://support.ntp.org/bin/view/Support/JavaSntpClient 使用绝对时间源,您将能够检测时钟变化

答案 1 :(得分:0)

我假设您使用Timer和TimerTask类。

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

javadoc Timer