我正在使用System.Time.Instant来确定网址响应简单请求的速度。我的总体目标是确定家用计算机与我在200英里之外的远程计算机上设置的服务之间的延迟。这是代码的简化版本,否则运行良好:
...//instantiated all necessary variables here....
Instant starts = Instant.now();
...
//Get information from web address
url = new URL(webAddress);
inputstream = url.openStream();
br = new BufferedReader(new InputStreamReader(inputstream));
//Wait for website to respond
while ((line = br.readLine()) != null)
{
instanceOutput += line;
}
Instant ends = Instant.now();
...
//Output the duration
return ("time required to get result: " + Duration.between(starts, ends).toMillis());
这倾向于产生0毫秒或14-16毫秒的结果,或偶尔产生大约15毫秒的倍数的较长周期。但是,即使向下舍入,延迟实际上也不可能是0毫秒。这些机器相距200英里,所以信号必须每程至少花费2到3毫秒,否则会超过光速。
我能找到的唯一类似的问题是这个问题可以追溯到2009年,第二个答案提出了一个原因(但是对于另一种方法),并且文档链接被破坏了:{{3}此外,似乎Java可能已经更新了计时。并且,系统计时器没有定期更新的说法似乎非常特别,我无法在其他任何地方找到它。
这是一个足够好的方法来计算持续时间到最接近的毫秒?从我最近阅读的纳秒定时器会更准确,但我不需要那么精确,如果不解释问题的原因并从中学习,解决问题将是一个糟糕的形式。 。我做错了什么或误解了什么?