Thread.sleep(500) приостанавливает текущий поток как минимум на 500 миллисекунд, я знаю, что это может быть чуть больше 500, но не меньше. Теперь 1 миллисекунда = 1000000 наносекунд. Я хочу приостановить текущий поток на 500 миллисекунд, т. Е. = 500 * 1000000 наносекунд. Но когда я запускаю следующий код, он иногда спит меньше указанного значения в наносекундах. Почему это? и как спать хотя бы 500*1000000 наносекунд.
long t1=System.nanoTime();
try{
Thread.sleep(500);
}catch(InterruptedException e){}
long t2=System.nanoTime();
System.out.println((t2-t1)+" nanoseconds");
System.out.println((500*1000000-(t2-t1))+" nanoseconds");
иногда вывод
499795328 nanoseconds
204672 nanoseconds
(t2-t1)-TimeUnit.MILLISECONDS.toNanos(500)
TimeUnit более наглядны. - person WalterM   schedule 31.12.2015