我有一个简单的时钟线程,每秒更新一次时间。为了实现这一点,我使用了Thread.sleep(1000)每隔1秒调用一次worker类,但是它的时钟运行似乎比计算机时钟快一点。有没有一种方法可以使睡眠时钟正常化,使其能够在一秒钟内完全唤醒,就像我的计算机时钟一样?

最佳答案

根据JavaDoc:,这应该是预期的


  使当前正在执行的线程进入睡眠状态(暂时停止
  执行)指定的毫秒数(以
  系统计时器和调度程序的精度和准确性。线程
  不会失去任何监视器的所有权。


您可以做的可能是减少睡眠时间,例如400毫秒,然后检查时间是否已更改。

另外,您可以使用Timer并每秒触发一次事件并更新您的时间。

编辑:根据您的评论,您可以执行以下操作:

long initTime = System.getTimeinMillis();
while(true)
{
      Thread.sleep(200);
      if((System.getTimeInMillis() - initTime) >= 1000)
      {
          initTime = System.getTimeInMillis();
          //Update your timer.
      }
}

关于java - 对于简单的时钟应用程序,准确的Thread.sleep?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19486741/

10-13 06:29