1

这是我的代码

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或者有一些延迟?

4

6 回答 6

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 秒结束后不让它运行,它可能会休眠更长时间。
如果更多并发线程同时在可运行池中,则可能会发生这种情况。

于 2012-05-08T14:45:46.997 回答
3

非实时调度程序不能保证时间。

如果您正在执行某种真正依赖时序的硬件通信,您可能应该使用RTSJ

如果您每 x 毫秒执行一次操作,则可以使用TimeTask,它的性能会稍好一些。

于 2012-05-08T15:03:18.727 回答
2

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

于 2012-05-08T14:43:59.210 回答
0

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

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

于 2012-05-08T14:43:43.910 回答
0

我会说除非你有很多线程运行它非常接近准确。如果你有几个线程,那么这是一个竞争。

于 2012-05-08T14:46:55.767 回答
0

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

于 2012-05-08T14:49:15.330 回答