2013-12-09 32 views
1

我正在編寫單線程程序,每次操作後都需要暫停。 (暫停= 1到60秒之間的隨機值)。Thread.sleep(60 * 1000)讓我的程序休眠半小時或更長時間

所以這樣的方法中寫道:

public void freeze() throws InterruptedException { 
    Thread.sleep(nextFreezeDurationSec * 1000); 
    calculateNextFreezeDuration(); 
} 

,同時期待通過程序日誌中我發現了一個問題。 Аpparently,對於一些不明瞭我的理由,後500-700操作它使我的程序的時候一個更大的量睡(它曾經是超過一小時以上)

而且我寫的另一種方法:

public void freeze() { 
    long nextFreezeEnd = System.currentTimeMillis() + (nextFreezeDurationSec * 1000); 
    while (System.currentTimeMillis() < nextFreezeEnd) { 
     /*NOR*/ 
    } 
    calculateNextFreezeDuration(); 
} 

這個工作正常。但它吃瘋狂的CPU。

我將不勝感激對此問題的任何建議。

+0

怎麼樣定時器嗎? –

+2

也許還包含'calculateNextFreezeDuration()'?您是否嘗試過記錄'nextFreezeDurationSec'的值以確保它是預期值? – turbo

+0

這是。沒什麼特別的。 private void calculateNextFreezeDuration(){ setNextFreezeDurationSec( random.nextInt(maxLimitSec - minLimitSec)+ minLimitSec ); } – nikopol86

回答

0

第二個問題是吃CPU,因爲它不斷計算while循環中的nextFreezeDuration。

它每次碰到while(在while循環完成之前是無限的),它會進行計算。研究如何採取讓它等待一對夫婦至少毫秒讓它前重擊while循環