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