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

jea*_*ean 5 java timer

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

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

Java有一种System.nanoTime独立于系统时间的方法,但它似乎无法使用Timer.

是否有Timer库支持我需要的东西?或者我必须自己实施?

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

bes*_*sss 6

你有2个选择:

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

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