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

向Java代码中添加十进制毫秒延迟,java,multithreading,events,timeout,timedelay,Java,Multithreading,Events,Timeout,Timedelay,我想在java代码中添加0.488毫秒的延迟。但是thread.sleep()和计时器函数只允许毫秒的粒度。如何指定低于该级别的延迟量 您可以使用Thread.sleep(长毫秒,整数纳米) 请注意,您无法保证睡眠的准确性。根据您的系统,计时器可能仅精确到10ms左右。从1.5开始,您可以使用这个很好的方法java.util.concurrent.TimeUnit.sleep(长超时): TimeUnit.anything.sleep()调用Thread.sleep()和Thread.sleep

我想在java代码中添加0.488毫秒的延迟。但是thread.sleep()和计时器函数只允许毫秒的粒度。如何指定低于该级别的延迟量

您可以使用
Thread.sleep(长毫秒,整数纳米)


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

从1.5开始,您可以使用这个很好的方法
java.util.concurrent.TimeUnit.sleep(长超时)

TimeUnit.anything.sleep()调用Thread.sleep()和Thread.sleep()四舍五入到毫秒, 所有sleep()都无法使用,精度低于毫秒

Thread.sleep(长毫秒,整数纳米)实现:

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;
}
publicstaticvoidsleep(longmillis,intnanos)抛出java.lang.InterruptedException
{
ms=毫秒;
如果(ms0){
如果(ns>(int)999999){
//异常“纳秒超时值超出范围”
返回;
}
}
否则{
//异常“纳秒超时值超出范围”
返回;
}

如果(检查以下问题:在WIndows JDK1.6.0_37中,此方法只需添加一毫秒,并调用Thread.sleep()。它完全忽略了纳秒时间。@kornero:这正是您无法保证此方法精度的原因:)然而,在某些系统上,您可以获得亚毫秒的精度。如果您想等待少量微秒,则不能依赖于此。唯一的方法是在线程上忙着等待。
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;
}