Tag: nanime

System.nanoTime()是否在线程间保持一致?

我想计算两个事件之间经过的时间,以纳秒为单位。 为此,我可以使用此处提到的System.nanoTime() 。 问题是这两个事件发生在不同的线程中。 由于nanoTime()不返回绝对时间戳,而只能用于计算时间差 ,我想知道我在两个不同线程上得到的值是否与两个事件之间经过的物理时间一致。

如何将System.nanoTime的结果转换为Java中的日期?

我想将System.nanoTime()的结果转换为日期。 public void tempBan(Player p, Player banner, int timeInSeconds){ Long timeInNano = (long) (timeInSeconds * 10^9); int newTime = (int) (System.nanoTime() + timeInNano); // here I want to convert newTime to a date } 我已经通过乘以10 ^ 9将秒转换为纳秒 。 现在我需要将当前系统时间加上我转换为纳秒的参数转换为日期。

为什么我使用System.nanoTime()获得负时间?

我正在尝试使用以下代码与System.nanoTime()来度量代码的System.nanoTime()时间。 public static void main(String[] args) throws Exception { while (true) { long start = System.nanoTime(); for (int i = 0; i < 10000; i++) ; long end = System.nanoTime(); long cost = end – start; if (cost < 0) { System.out.println("start: " + start + ", end: " + end + ", cost: " […]

System.nanoTime()的精度与准确度

System.nanoTime()的文档说明如下(强调我的)。 此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。 返回的值表示纳秒,因为某些固定但是任意时间(可能在将来,因此值可能为负)。 该方法提供纳秒精度,但不一定是纳秒精度。 不保证值的变化频率。 在我看来,这可以用两种不同的方式解释: 上面粗体的句子指的是个人返回值。 然后,从数值意义上理解精度和准确度。 也就是说,精确度是指有效数字的位数 – 截断的位置,精确度是指数字是否正确(如前面的答案中所述,’精确’和’准确度’之间有什么区别? ) 上面粗体的句子指的是方法本身的能力。 然后,精确度和准确度将被理解为飞镖类比( http://en.wikipedia.org/wiki/Precision_vs._accuracy#Accuracy_versus_precision:_the_target_analogy )。 因此,低精度,高精度=>错误的值被高精度地反复击中:想象物理时间静止,nanoTime()的连续调用返回相同的数值,但是它与实际经过的时间相比有所不同。参考时间通过一些常数偏移。 哪种解释是正确的? 我的观点是,解释2意味着使用nanoTime()(通过减去两个返回值)测量时间差将是正确的纳秒(因为测量中的常数误差/偏移将被消除),而解释1将不会不能保证测量之间的一致性,因此不一定意味着高精度的时间差测量。 2013年 4月15日更新: System.nanoTime()的Java 7文档已更新,以解决与先前措辞可能混淆的问题。 返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。 此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。 返回的值表示纳秒,因为某些固定但任意的原始时间(可能在将来,因此值可能为负)。 在Java虚拟机的实例中,此方法的所有调用都使用相同的原点; 其他虚拟机实例可能使用不同的来源。 此方法提供纳秒级精度,但不一定是纳秒级分辨率(即,值的变化频率) – 除了分辨率至少与currentTimeMillis()的分辨率一样好之外,不做任何保证。 由于数值溢出,跨越大于约292年(2 63纳秒)的连续调用的差异将无法正确计算经过的时间。 仅当计算在Java虚拟机的同一实例中获得的两个此类值之间的差异时,此方法返回的值才有意义。

Java 8 Instant.now()具有纳秒分辨率?

Java 8的java.time.Instant以“纳秒分辨率”存储,但使用Instant.now()仅提供毫秒分辨率…… Instant instant = Instant.now(); System.out.println(instant); System.out.println(instant.getNano()); 结果… 2013-12-19T18:22:39.639Z 639000000 我怎样才能获得一个“现在”值但具有纳秒分辨率的瞬间?