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

在JDK中,它实现为:

public static void sleep(long millis, int nanos) throws InterruptedException { if (millis < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (nanos  999999) { throw new IllegalArgumentException( "nanosecond timeout value out of range"); } if (nanos >= 500000 || (nanos != 0 && millis == 0)) { millis++; } sleep(millis); } 

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

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

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

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

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

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

未来打样的问题是向后兼容。 这种方法已经使用了这么长时间,如果你想要亚微秒的延迟,你必须使用不同的方法。

为了比较,

  Object.wait(millis, nano);