向Java代码中添加十进制毫秒延迟
我想在java代码中添加0.488毫秒的延迟。但是thread.sleep()和计时器函数只允许毫秒的粒度。如何指定低于该级别的延迟量 您可以使用向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
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;
}