[英]Does Thread.sleep() make the execution to cease for accurate an interval
这是我的代码
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
还是有一些延迟?
来自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秒结束后不让其运行,则它可能会休眠更长的时间。
如果更多的并发线程同时在可运行池中,则可能会发生这种情况。
它将休眠至少10秒钟,然后不久唤醒(除非被打断)。 之后的时间取决于操作系统和计算机上的负载。
它或多或少是随机的,因为通常不需要您的OS任务计划程序来给您的进程所需的全部注意力。 通常,您将无法长时间睡眠(例如, Thread.sleep(5)
可能会在调用后5毫秒后恢复进程),但是随着睡眠时间的增加,相对精度会提高。
如果您可以忍受一些回旋余地,则Thread.sleep(10000)
通常会休眠一段时间,该时间足够接近10秒。
我要说的是,除非您有很多线程在运行,否则它将非常接近精确。 如果您有多个线程,那就是竞争。
从睡眠到运行的线程开销非常低。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.