Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 睡眠(60*1000)使我的程序睡眠半小时或更长时间_Java_Performance_Freeze_Thread Sleep - Fatal编程技术网

Java 睡眠(60*1000)使我的程序睡眠半小时或更长时间

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次操作后,它会使我的程序休眠更长的时间(一旦

我正在编写单线程程序,每次操作后都需要暂停。(暂停=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();
}
公共作废冻结(){
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上。