Java系统时钟独立调度/暂停

时间:2010-12-20 09:28:16

标签: java sleep clock

我需要一种以独立于系统时钟的方式暂停/休眠线程的方法。这意味着,如果我希望线程在dT msecs中弱化,那么如果系统时间在此期间发生显着变化,它也必须这样做。我对msecs的准确性并不是那么感兴趣,而且原则上它更有效。

TimerTasks不是一个选项,因为它们可以在绝对时间内工作。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

棘手......很难知道系统时钟是否被用于任何给定的策略。但是,避免使用时钟是因为在线程暂停期间可能会更改时间,但 System.nanoTime() 与当前时间无关,因为它纯粹是自JVM启动以来的纳秒数。因此,如果暂停策略使用nanos,则可以假设暂停时段将通过系统时钟时间变化保持准确性。也许Thread.join(0,nanos)在循环中调用:

public static void pause(long ms) throws InterruptedException {
   long final ZERO = 0L;
   int final MAX_NANOS = 999999;
   for(int i = 0; i < ms+1; i++) {
      Thread.currentThread().join(ZERO, MAX_NANOS);
   }
}

我没有测试系统时钟的变化,但似乎在.004%的偏差范围内运行。

答案 2 :(得分:0)

我不确定我是否理解你的问题。如果您需要任务计划程序,Quartz非常好。如果你真的想暂停一个任意线程x的时间比这更麻烦。