在JDK中,它实现为:
public static void sleep(long millis, int nanos)
throws InterruptedException {
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
millis++;
}
sleep(millis);
}
这意味着
nanos
参数根本不执行任何操作。它背后的想法是,在具有更精确时序的硬件上,针对它的JVM可以为其提供更好的实现吗?
最佳答案
常规操作系统没有足够细粒度的分辨率,无法一次睡眠数纳秒。但是,存在real time operating systems,其中安排事件在确切的时间发生是至关重要的,许多操作的延迟非常低。 ABS系统是RTOS的一个示例。在此类系统上,纳秒级睡眠比在操作系统无法可靠地睡眠少于15ms的正常OS上有用得多。
但是,拥有两个单独的JDK并不是解决方案。因此,在Windows和Linux上,JVM将尽最大努力进行x纳秒的睡眠。
关于sleep - sleep 的目的是什么(long millis,int nanos)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6553225/