What's the purpose of sleep(long millis, int nanos)?

前端 未结 3 1438
夕颜
夕颜 2020-12-10 01:16

In the JDK, it\'s implemented as:

public static void sleep(long millis, int nanos) 
throws InterruptedException {
if (millis < 0) {
        throw new Ille         


        
相关标签:
3条回答
  • 2020-12-10 01:25

    The problem with future proofing is backward compatibily. This method has worked this way for so long that if you want sub-micro-second delays you have to use different methods.

    For comparison,

     Object.wait(millis, nano);
    
    0 讨论(0)
  • 2020-12-10 01:37

    A regular OS doesn't have a fine grained enough resolution to sleep for nanoseconds at a time. However, real time operating systems exist, where scheduling an event to take place at an exact moment in time is critical and latencies for many operations are VERY low. An ABS system is one example of a RTOS. Sleeping for nanoseconds is much more useful on such systems than on normal OSes where the OS can't reliably sleep for any period less than 15ms.

    However, having two separate JDKs is no solution. Hence on Windows and Linux the JVM will make a best attempt to sleep for x nanoseconds.

    0 讨论(0)
  • 2020-12-10 01:46

    It looks like a future-proof addition, for when we all have petaflop laptops and we routinely specify delays in nanoseconds. Meanwhile if you specify a nanosecond delay, you get a millisecond delay.

    When hardware improves and the JVM follows, the app will not need to be rewritten.

    0 讨论(0)
提交回复
热议问题