睡眠的目的是什么(long millis,int nanos)?

Rev*_*nzo 26 java sleep

在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);
}
Run Code Online (Sandbox Code Playgroud)

这意味着nanos论证根本没有做任何事情.

它背后的想法是,在具有更精确计时的硬件上,JVM可以为它提供更好的实现吗?

Dun*_*nes 14

常规操作系统没有足够精细的分辨率,无法一次睡眠纳秒.但是,存在实时操作系统,其中在精确的时刻安排事件是至关重要的,并且许多操作的延迟非常低.ABS系统是RTOS的一个示例.睡眠纳秒在这样的系统上比在普通操作系统上更有用,在普通操作系统中,操作系统无法在不到15毫秒的时间内可靠地睡眠.

但是,拥有两个单独的JDK并不是解决方案.因此,在Windows和Linux上,JVM将最佳尝试睡眠x纳秒.


jco*_*ctx 7

它看起来像是一个面向未来的新增功能,因为当我们都拥有petaflop笔记本电脑时,我们会定期指定延迟时间为纳秒.同时,如果指定纳秒延迟,则会得到毫秒延迟.

当硬件改进并且JVM跟随时,应用程序将不需要重写.