稳定的计时器,与系统时间无关

时间:2011-12-24 09:33:53

标签: java timer

我使用java.util.Timer在我的应用程序中触发作业,但我发现它取决于系统时间:如果调整系统时间,计时器的触发器将受到影响。

例如,如果系统时间回退80秒,计时器将停止工作80秒。

Java有一个System.nanoTime方法,它与系统时间无关,但似乎就是这样 不能在Timer中使用。

是否有支持我需要的定时器库?或者我必须自己实施?

请注意,我不需要精确的当前时间(日期),我需要一个精确的时间间隔

2 个答案:

答案 0 :(得分:6)

你有两个选择:

  • 写一个计时器,相对简单。在任何人告诉reinvent the wheel之前,能够自己承担任务总是很重要。特别是当它大约有20行代码时。
  • 使用java.util.concurrent.ScheduledThreadPoolExecturor并使用队列impl scheduleAtFixedRate。基于System.nanoTime
  • 安装ntp守护程序,通过在很长一段时间内以非常轻微的方式调整(减慢,加速)系统时钟来调整时间。

很少有其他事情,完美的100毫秒是非实时GC环境中的高阶,因为GC有时可能STW(停止世界)几秒钟。 Sun的GC不能可靠地做到这一点。应该在改进的Linux内核上运行IBM的Metronome。您可能希望注意您的应用程序是否真正具有实时性要求。

答案 1 :(得分:0)

如果您的计算机处于隔离状态并且不在Internet上,我认为如果用户篡改时钟,您可以做的事情并不多。

另一方面,如果不是这种情况,您会发现很多API和Mashup可以让您读取正确的时间。你可以从那里读出时间。你可以从time.gov读取时间。另外twinsun.com你会给你很多额外的选择。

100ms对于互联网时间访问来说似乎太低了。

相关问题