Java 睡眠(60*1000)使我的程序睡眠半小时或更长时间
我正在编写单线程程序,每次操作后都需要暂停。(暂停=1到60秒之间的随机值) 所以有这样一个方法:Java 睡眠(60*1000)使我的程序睡眠半小时或更长时间,java,performance,freeze,thread-sleep,Java,Performance,Freeze,Thread Sleep,我正在编写单线程程序,每次操作后都需要暂停。(暂停=1到60秒之间的随机值) 所以有这样一个方法: public void freeze() throws InterruptedException { Thread.sleep(nextFreezeDurationSec * 1000); calculateNextFreezeDuration(); } 我在查看程序日志时发现了一个问题。А显然,由于一些我不知道的原因,在500-700次操作后,它会使我的程序休眠更长的时间(一旦
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();
}
公共作废冻结(){
long nextFreezeEnd=System.currentTimeMillis()+(nextFreezeDurationSec*1000);
while(System.currentTimeMillis()
这个很好用。但它疯狂地吞噬CPU
如果您能就此问题提供任何建议,我将不胜感激。第二个问题是消耗CPU,因为它在while循环中不断计算nextFreezeDuration
每次它点击while(在while循环完成之前是无限的),它都会进行计算。研究如何让它至少等待几毫秒,然后再让它重新命中while循环第二个是消耗CPU,因为它在while循环中不断计算nextFreezeDuration
每次它点击while(在while循环完成之前是无限的),它都会进行计算。研究如何让它至少等待几毫秒,然后再让它重新命中while循环可能是也可能是可能包括
calculateNext冻结持续时间()
?您是否尝试记录nextFreezeDurationSec
的值以确保它是预期值?请看。没什么特别的。私有void calculateNextFreezeDuration(){setNextFreezeDurationSec(random.nextInt(maxlimitesec-minLimitSec)+minLimitSec);}。所有这些都运行在Windows 7 64x、8GB RAM、CPU四核上。Intel Core i7-3770定时器不是一个选项。可能还包括CalculateNext冻结持续时间()
?您是否尝试记录nextFreezeDurationSec
的值以确保它是预期值?请看。没什么特别的。私有void calculateNextFreezeDuration(){setNextFreezeDurationSec(random.nextInt(maxlimitesec-minLimitSec)+minLimitSec);}。这一切都运行在Windows764X、8GB内存、CPU四核、Intel Core i7-3770Timer上。