2010-11-29 266 views
15

我想知道什么是最精确的转换大纳秒值的方法是以毫秒和纳秒为单位,999999的纳秒数的上限。目标是组合毫微秒和毫秒值,以确保在给定的极限情况下可达到最大分辨率。这是为了与睡眠/等待方法和一些其他外部库进行比较,从而得出大纳秒值。毫微秒到毫微秒的转换毫秒数<999999在Java中

编辑:我的代码看起来像现在以下几点:

while (hasNS3Events()) {         
    long delayNS = getNS3EventTSDelay(); 
    long delayMS = 0; 
    if (delayNS <= 0) runOneNS3Event(); 
    else { 
     try { 
      if (delayNS > 999999) { 
       delayMS = delayNS/1000000; 
       delayNS = delayNS % 1000000; 
      } 

      EVTLOCK.wait(delayMS, (int)delayNS); 
     } catch (InterruptedException e) { 

     } 
    } 
} 

干杯, 克里斯

+1

值得注意这一次是操作系统等待至少这么长时间的暗示。在Windows和Linux中,延迟通常在2毫秒以内,但可能会很长。恕我直言,你不应该担心纳秒时间,因为你不太可能看到任何区别。 – 2010-11-29 08:31:33

回答

19

只要看看它的divmod与1000000

+0

这似乎是合乎逻辑:) – 2010-11-29 03:39:02

+0

你能检查粘贴的代码是否正确?干杯:D我厌倦的一件事是999999的上限而不是1000000(所以Javadoc说)。这会导致任何问题吗? – 2010-11-29 03:44:22

68

为什么不使用内置的Java方法。该TIMEUNIT是并发包,以便建立准确的一部分,你需要

long durationInMs = TimeUnit.MILLISECONDS.convert(delayNS, TimeUnit.NANOSECONDS); 
50

对于使用java.util.concurrent.TimeUnit,相当于什么肖恩上面写了一个更短的转换,你可以使用:

long durationInMs = TimeUnit.NANOSECONDS.toMillis(delayNS);