Thread.sleep(60 * 1000)使我的程序进入睡眠状态半小时或更长时间

时间:2013-12-09 21:42:12

标签: java performance freeze thread-sleep

我正在编写单线程程序,需要在每次操作后暂停。 (暂停= 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。

对于这个问题的任何建议,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

第二个是吃CPU,因为它在while循环中不断计算nextFreezeDuration。

每次碰到while(无限循环直到while循环完成),它都会进行计算。研究如何让它等待几个毫秒,至少让它重新点击while循环