Java-替代thread.sleep

我需要将while循环暂停特定的毫秒数。我尝试使用Thread.sleep(duration),但是它不准确,尤其是在循环场景中。毫秒精度在我的程序中很重要。

这是我不希望在expectedElapsedTime通过之前检查条件的算法。

while (condition) {

time = System.currentTimeMillis();

//do something

if (elapsedTime(time) < expectedElapsedTime) ) {

pause the loop // NEED SUBSTITUTE FOR Thread.sleep()

}

// Alternative that I have tried but not giving good results is

while ((elapsedTime(time) < expectedElapsedTime)) {

//do nothing

}

}

long elapsedTime(long time) {

long diff = System.currentTimeMillis() - time;

return diff;

}

回答:

你能指望什么?

如果您进入睡眠状态,则一旦您的进程再次可运行,就必须等待线程调度程序再次对其进行调度。

我的意思是如果您进入睡眠状态50秒钟,这并不意味着您的进程将在完全50秒钟内运行,因为它一旦唤醒并可以运行,则必须等待安排到CPU,这需要额外的时间加上您的时间有上下文切换。

您无能为力,无法控制它,因此您无法达到所说的准确性。

对于您的情况,我建议改为旋转循环。

long now = System.currentTimeMillis();   

while(now < expectedElapsedTime){

now = System.currentTimeMillis();

}

以上是 Java-替代thread.sleep 的全部内容, 来源链接: utcz.com/qa/423101.html

回到顶部