为Java代码添加十进制毫秒延迟

时间:2012-11-27 06:16:44

标签: java multithreading events timeout timedelay

我想在我的java代码中添加0.488 ms的延迟。但thread.sleep()和Timer函数只允许毫秒级的粒度。如何指定低于该水平的延迟量?

3 个答案:

答案 0 :(得分:12)

从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); 

答案 1 :(得分:4)

您可以使用Thread.sleep(long millis, int nanos)

请注意,您无法保证睡眠的准确程度。根据您的系统,定时器可能只精确到10ms左右。

答案 2 :(得分:2)

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);