我正在开发一个小型游戏项目,并希望跟踪时间以处理物理。在浏览了不同的方法之后,起初我决定使用 JavaInstant和Duration类,现在切换到 Guava 的Stopwatch实现,但是,在我的代码片段中,这两种方法在第二次调用runtime.elapsed(). 从长远来看,这似乎不是一个大问题,但为什么会发生这种情况呢?
我尝试在 Windows 和 Linux(Ubuntu 18.04)中以焦点和线程的形式运行下面的代码,结果保持不变 - 确切的值不同,但出现了差距。我正在使用带有 JDK 11 的 IntelliJ IDEA 环境。
主要片段:
public static void main(String[] args) {
MassObject[] planets = {
new Spaceship(10, 0, 6378000)
};
planets[0].run();
}
这是我的课的一部分MassObject extends Thread:
public void run() {
// I am using StringBuilder to eliminate flushing delays.
StringBuilder output = new StringBuilder();
Stopwatch runtime = Stopwatch.createStarted();
// massObjectList = static List<MassObject>;
for (MassObject b : massObjectList) {
if(b!=this) calculateGravity(this, b);
}
for (int i = 0; i < 10; i++) {
output.append(runtime.elapsed().getNano()).append("\n");
}
System.out.println(output);
}
标准输出:
30700
1807000
1808900
1811600
1812400
1813300
1830200
1833200
1834500
1835500
谢谢你的帮助。
POPMUISE
相关分类