ntp时间同步之前,调用线程sleep(xxxxxxx),预计是凌晨03:00的时候sleep结束线程被唤醒。
但是在凌晨01:00左右进行ntp时间同步之后系统时间出现了10几秒的误差,
这个之后线程居然在02:50分就被唤醒了。我不太明白为什么ntp只是出现了10来秒的误差,现成的sleep方法会出来10分钟左右的
误差呢。

解决方案 »

  1.   

    因为业务上面的需要,线程必须sleep 18个小时。
    就用18*60*60 = 64800秒来设置的,因为sleep设置毫秒级别
    所以就变成了sleep(64800000)比如早晨
    11/27 08:00:00开始执行sleep
    11/28 02:00:00预计唤醒sleep
    但是在11/28 01:00左右有了一个ntp的时间同步处理,这个时候
    把系统时间向前调了10来秒,按道理sleep也只误差10来秒才对,
    但是我发现sleep误差了5分钟左右
    在11/28 01:55:00就被唤醒了
    不知道什么原因
      

  2.   

    把一个长长的sleep拆成若干短的sleep,循环来。怀疑你中途调整时间对那个已经进入的sleep可能没作用。
      

  3.   

    sleep是按照毫秒单位计时的,ntp调整的是系统时间。
    我觉得sleep一旦设置了睡眠的毫秒数就应该和ntp没有啥关系了阿。
    我就是弄不明白,那多出来的5分钟是怎么出来的
      

  4.   

    仔细想想觉得这个点子其实也不够。还要在短sleep之间监测系统时间。
    即:
    用时间查询来决定是否到达时间,而不是依赖sleep自己的计时。
    (这样你调整系统时间才具有了现实意义)
      

  5.   

    嗯,谢谢你,这个方法确实很好,可以解决这个问题。解决之前,我想知道是什么原因造成的。为什么ntp只调整了10来秒,但是sleep误差达到了5分钟
    这个不太明白原因
    我目前用
    windows作ntpserver
    linux作ntpclient
    正在试验看看
      

  6.   

    我用windows作ntpserver,linux作ntpclient
    也没有发生这样的问题啊。有没有高手可以解答一下