Thread.sleep()是否使执行停止以获得准确的间隔

时间:2012-05-08 14:41:12

标签: java

这是我的代码

try{

  System.out.println("Before");
  thread.sleep(10000);//sleep for 10000 ms
  System.out.println("After");

}
catch(ItrerruptedException ie){
//If this thread was intrrupted by nother thread 
}

我只是想知道线程是否会在10秒钟内休眠,然后打印After或者有一些延迟?

6 个答案:

答案 0 :(得分:4)

来自javadocs:Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers.这意味着它将至少睡10秒钟。如果调度程序在10秒结束后决定不让它运行,它可能会睡得更久。
如果同时有更多并发线程在可运行池中,则可能发生这种情况。

答案 1 :(得分:3)

非实时调度程序不保证计时。

如果您正在进行某种真正依赖于时间安排的硬件通信,则应该使用RTSJ

如果你每隔x毫秒做一些事情,你可以使用性能稍好的TimeTask

答案 2 :(得分:2)

它会睡眠至少10秒,并在不久之后醒来(除非被打断)。之后多久取决于操作系统和机器上的负载。

答案 3 :(得分:0)

它或多或少是随机的,因为您的操作系统任务调度程序通常不需要为您的进程提供所需的全部注意力。通常,您将无法在非常短的时间内睡眠(例如,Thread.sleep(5)可能会在通话后5毫秒内恢复您的过程),但随着您增加睡眠时间,相对精度会增加。

如果你可以容忍一些余地,Thread.sleep(10000)通常会睡到足够接近10秒的时间。

答案 4 :(得分:0)

我会说,除非你有很多线程在运行,否则非常接近精确。如果你有几个线程,那么这是一场比赛。

答案 5 :(得分:0)

线程从睡眠到运行的开销非常低。