我正在编写单线程程序,需要在每次操作后暂停。 (暂停= 1到60秒之间的随机值)。
这样写的方法是这样的:
public void freeze() throws InterruptedException {
Thread.sleep(nextFreezeDurationSec * 1000);
calculateNextFreezeDuration();
}
我在查看程序日志时发现了一个问题。 А很明显,对于一些我不知道的原因,经过500-700次操作后,它会使我的程序睡眠时间更长(一次超过一小时)
我写了另一种方法:
public void freeze() {
long nextFreezeEnd = System.currentTimeMillis() + (nextFreezeDurationSec * 1000);
while (System.currentTimeMillis() < nextFreezeEnd) {
/*NOR*/
}
calculateNextFreezeDuration();
}
这个工作正常。但它像疯了一样吃CPU。
对于这个问题的任何建议,我将不胜感激。
答案 0 :(得分:1)
答案 1 :(得分:0)
第二个是吃CPU,因为它在while循环中不断计算nextFreezeDuration。
每次碰到while(无限循环直到while循环完成),它都会进行计算。研究如何让它等待几个毫秒,至少让它重新点击while循环