As per 这个问题 https://stackoverflow.com/q/45419940/1898563, Thread.sleep
不一定保证在您指定的时间内睡眠:它可能会更短or longer.
如果您阅读了文档Thread.sleep https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#sleep-long-,您会发现对于睡眠的确切持续时间没有强有力的保证。它特别指出持续时间是
受系统计时器和调度程序的精度和准确性影响
这(故意)含糊不清,但暗示不应过分依赖持续时间。
特定操作系统上可能的睡眠持续时间的粒度由线程调度程序的中断周期确定。
在Windows中,调度程序的中断周期通常约为10或
15 毫秒(我相信这是由处理器决定的),但是一个
可以在软件中请求更长的周期,Hotspot JVM 会这样做
当它认为有必要时
Source http://www.javamex.com/tutorials/threads/sleep.shtml,强调我的
我如何才能实际保证睡眠持续时间至少为我指定的值?
最佳实用的解决方案是计时睡眠并在剩余时间时继续睡眠:
public void sleepAtLeast(long millis) throws InterruptedException
{
long t0 = System.currentTimeMillis();
long millisLeft = millis;
while (millisLeft > 0) {
Thread.sleep(millisLeft);
long t1 = System.currentTimeMillis();
millisLeft = millis - (t1 - t0);
}
}
代码和信息来自here http://www.javamex.com/tutorials/threads/sleep_issues.shtml
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)