在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/

10-11 17:53