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

时间:2012-07-07 15:36:49

标签: multithreading time sleep

在这篇关于falsehoods programmers believe about time的有趣文章中,其中一篇是

  

Thread.sleep(1000)睡眠时间>> = 1000毫秒。

什么时候不是这样?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

OS仅在中断时作出反应,因此在中断时处理睡眠到期。通过timeBeginPeriod可以增加中断频率是正确的。困难在于Sleep()函数的到期需要满足两个条件:

  1. 必须发生中断
  2. dwMilliseconds 必须到期。
  3. 条件2是这里的问题。 dwMilliseconds 将与中断时过期的系统时间进行比较。系统时间将导致Sleep()函数以文件时间格式递增到期,换句话说,当系统时间增量的n倍大于 dwMilliseconds 时。因此,人们可能无法获得1ms的睡眠延迟。这严重依赖于系统的硬件和软件及配置(系统时间增量/粒度)。

    仔细查看一些示例here

    回答这个问题:Thread.sleep(1000)睡眠为> = 1000毫秒始终为TRUE! 编辑:在Thread.sleep(1)

    之后执行

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