Java System.Time.Instant.now обновляется только с интервалом в 15 миллисекунд
Я использую 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 году, и второй ответ предлагает причину (но для другого метода), и ссылка на документацию не работает: точность таймера в Java, также, похоже, что с тех пор Java обновила хронометраж. И утверждение, что системный таймер не обновляется регулярно, кажется необычным, и я не могу найти его повторять где-либо еще.
Это достаточно хороший способ рассчитать продолжительность до ближайшей миллисекунды? Из того, что я недавно читал, наносекундный таймер был бы более точным, но мне не нужна такая точность, и для меня было бы плохой формой исправить проблему, не пытаясь понять, почему проблема возникла, и учиться на ней., Что я делаю неправильно или недоразумение?