gpt4 book ai didi

java - -System.nanoTime() + System.nanoTime() 是否保证 >= 0?

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:26 26 4
gpt4 key购买 nike

大家好,我有一段代码如下所示:

public class Test {
public static void main(String args[]) {
long a = System.currentTimeMillis(); // line 1
long b = System.currentTimeMillis(); // line 2
assert b - a >= 0;

long y = System.nanoTime(); // line 5
long z = System.nanoTime(); // line 6
}
}

所以 IERS表示下一个闰秒将在 2012 年 6 月 30 日 11:59.9 之后立即发生。

我想知道如果第 1 行在 30th June 2012 11:59.91< 之后的 0.9 秒运行是否正确支持>st 2012 年 7 月 00:00.0,

第 2 行在第 1 行之后 0.1 秒运行,

b - a 的结果可能是负数? (-900 毫秒)

如果是这样,如果第 5 行在 30th June 2012 11:59.9 变成 1 之后的 0.9 秒运行,是否是真的st 2012 年 7 月 00:00.0,

第 6 行在第 5 行后 0.1 秒运行,

z - y 的结果可能是负数? (-900,000,000 纳秒?)

最佳答案

System.nanoTime 应该是单调递增的——如果你有两次调用它,AB , 和 A发生在B之前, 然后 A <= B .但在实践中,你实际上可以观察到 nanoTime “倒退”。

nanoTime由 CPU 上的内部计数器确定,其开始时间基本上是任意的(这就是为什么它不能用于确定挂钟时间的原因)。这可能会在多核环境中引起问题,因为一个内核的内部计时器可能与另一个内核的起始点不同。 Hotspot 试图弥补这一点,但并不总是成功,因此您实际上可以看到 nanoTime在某些情况下会倒退。

有一个recent discussion关于并发兴趣邮件列表上的这个。具体见this email链接到 this bug report , 和 this email其中谈到了解决方法(这似乎不起作用,但我不确定为什么)。错误报告包含相当多的详细信息。

关于java - -System.nanoTime() + System.nanoTime() 是否保证 >= 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8853698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com