【发布时间】:2011-08-20 07:35:05
【问题描述】:
现在说是 6 点,我有一个 Timer 并安排了一个 TimerTask 在 10 点。之后,系统日期时间由其他服务(例如 ntp)调整为 9 点。我仍然希望我的TimerTask 将在 10 点被解雇,但它不会,Timer 仍然等待接下来的 4 小时并解雇我的TimerTask。在这种情况下我该怎么办?
【问题讨论】:
现在说是 6 点,我有一个 Timer 并安排了一个 TimerTask 在 10 点。之后,系统日期时间由其他服务(例如 ntp)调整为 9 点。我仍然希望我的TimerTask 将在 10 点被解雇,但它不会,Timer 仍然等待接下来的 4 小时并解雇我的TimerTask。在这种情况下我该怎么办?
【问题讨论】:
首先,如果你的时钟已经过了 4 小时,你已经陷入了非常糟糕的混乱之中。通常时间调整只会以毫秒或秒为单位 - 或者偶尔一两分钟,如果机器很长时间没有在线的话。一种选择是在设置计时器之前通过自己的 NTP 调用来检查时间是否相当准确。
另一种选择是创建一个合理定期调用的计时器 - 例如每分钟或每五分钟一次 - 它会检查时间然后选择性地采取行动。它的效率略低,但我不认为唤醒单个线程以每分钟执行一次简单检查的影响会对性能产生重大影响。您应该根据您需要计时器触发的准确程度以及您需要它对性能的影响有多大来调整检查的规律性。
【讨论】: