我有一个简单的时钟线程,每秒更新一次时间。为了实现这一点,我使用了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/