6

Java コードに 0.488 ミリ秒の遅延を追加したいと考えています。ただし、thread.sleep() および Timer 関数では、ミリ秒単位の粒度しか許可されません。そのレベルよりも低い遅延量を指定するにはどうすればよいですか?

4

3 に答える 3

15

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); 
于 2012-11-27T13:17:05.857 に答える
4

使用できますThread.sleep(long millis, int nanos)

睡眠がどれほど正確になるかは保証できないことに注意してください。システムによっては、タイマーの精度が 10ms 程度しかない場合があります。

于 2012-11-27T06:19:07.100 に答える
2

TimeUnit.anything.sleep() は Thread.sleep() と Thread.sleep()をミリ秒に丸め、ミリ秒未満の精度ではすべての sleep() を使用できません

Thread.sleep(long ミリ秒、int ナノ秒) の実装:

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); にも同じ状況があります。

于 2013-12-24T23:17:06.940 に答える