Thread.sleep(1000)什么时候睡眠时间少于1000毫秒?

rip*_*234 6 time multithreading sleep

在这篇关于虚假程序的有趣文章中,程序员相信时间,其中之一就是

Thread.sleep(1000)休眠> = 1000毫秒.

什么时候不是这样?

use*_*736 6

根据这个(Windows操作系统的睡眠实现,这就是Thread.sleep将在下面调用的内容):如果dwMilliseconds小于系统时钟的分辨率,则线程可能会睡眠少于指定的时间长度。如果 dwMilliseconds 大于 1 个刻度但小于 2 个刻度,则等待时间可以是 1 到 2 个刻度之间的任意值,依此类推。要提高睡眠间隔的准确性,请调用timeGetDevCaps函数来确定支持的最小计时器分辨率,并调用timeBeginPeriod函数将计时器分辨率设置为其最小值。


Arn*_*rno 5

操作系统仅对中断做出反应,因此在中断时处理睡眠到期。可以通过以下方式增加中断频率,这是正确的timeBeginPeriod。难点在于,该Sleep()功能的到期需要满足两个条件:

  1. 必须发生中断
  2. dwMilliseconds已过期。

条件2就是这里的问题。dwMilliseconds将与中断时过期的系统时间进行比较系统时间将导致Sleep()函数以文件时间格式增量过期,换句话说,当系统时间增量大于dwMilliseconds的 n 倍时。因此,人们可能永远无法获得 1 毫秒的睡眠延迟。这在很大程度上取决于系统的硬件、软件和配置(系统时间增量/粒度)。

可以在这里找到一些示例来仔细查看

回答这个问题: Thread.sleep(1000) 休眠 >= 1000 毫秒始终是 TRUE!编辑:在 Thread.sleep(1) 之后立即执行时

编辑:但是 Thread.sleep(1) 休眠 >= 1 毫秒可能并不总是 TRUE