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 обновила хронометраж. И утверждение, что системный таймер не обновляется регулярно, кажется необычным, и я не могу найти его повторять где-либо еще.

Это достаточно хороший способ рассчитать продолжительность до ближайшей миллисекунды? Из того, что я недавно читал, наносекундный таймер был бы более точным, но мне не нужна такая точность, и для меня было бы плохой формой исправить проблему, не пытаясь понять, почему проблема возникла, и учиться на ней., Что я делаю неправильно или недоразумение?

0 ответов

Другие вопросы по тегам