Добавьте десятичную миллисекундную задержку к коду Java

Я хочу добавить задержку 0,488 мс в мой код Java. но функции thread.sleep() и Timer допускают гранулярность только в миллисекундах. Как указать сумму задержки ниже этого уровня?

3 ответа

Решение

С 1.5 вы можете использовать этот хороший метод java.util.concurrent.TimeUnit.sleep(long timeout):

TimeUnit.SECONDS.sleep(1);
TimeUnit.MILLISECONDS.sleep(1000);
TimeUnit.MICROSECONDS.sleep(1000000);
TimeUnit.NANOSECONDS.sleep(1000000000); 

Ты можешь использовать Thread.sleep(long millis, int nanos)

Обратите внимание, что вы не можете гарантировать, насколько точным будет сон. В зависимости от вашей системы, таймер может быть с точностью до 10 мс или около того.

TimeUnit.anything.sleep() вызывает Thread.sleep () и Thread.sleep () с округлением до миллисекунд, все sleep () невозможно использовать с точностью менее миллисекунды

Реализация Thread.sleep(long millis, int nanos):

public static void sleep(long millis, int nanos) throws java.lang.InterruptedException
{
  ms = millis;
  if(ms<0) {
    // exception "timeout value is negative"
    return;
  }
  ns = nanos;
  if(ns>0) {
    if(ns>(int) 999999) {
      // exception "nanosecond timeout value out of range"
      return;
    }
  }
  else {
    // exception "nanosecond timeout value out of range"
    return;
  }
  if(ns<500000) {
    if(ns!=0) {
      if(ms==0) { // if zero ms and non-zero ns thread sleep 1ms
        ms++;
      }
    }
  }
  else {
    ms++;
  }
  sleep(ms);
  return;
}

такая же ситуация с методом wait(long, int);

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