2011-11-29 250 views
3

更新:我不知道爲什麼,但它突然變得很好。現在該程序的CPU使用率僅爲10%〜17%。爲什麼「while(true)」與「Thread.sleep」會導致100%的CPU使用率?


我在java中製作linux背景問題。
該問題應該每100秒執行一次。
所以我做一個定時器類和一些代碼象下面這樣:

while(true) { 
    try { 
    Thread.sleep(1000 * 100); 
    } catch (InterruptedException e) { 
    e.printStackTrace(); 
    }   
} 

但它仍然充滿了CPU使用率。

這就是整個main()。沒有其他程序正在運行。

public static void main(String[] args) throws WeiboException, HttpException, IOException{ 
    timer = new Timer(true); 
    timer.schedule(new Getdatatimer(), 0, 100 * 1000); 

    System.out.print("runnning \n"); 
    while(true) { 
    try { 
     Thread.sleep(1000 * 100); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    }    
    } 
} 

定時器每隔100秒準確運行一次。但問題是CPU使用率。

+3

單獨的代碼不應該導致「100%的CPU」(除非有一個下流的數量,如果InterruptedExceptions) - 其他線程正在運行?你是否100%確定代碼是運行的代碼,並且沒有過時的類? – 2011-11-29 06:24:35

+0

當你把'System.out.println(「hi!」+ System.currentTimeMillis());'在'Thread.sleep'上面的行上時會發生什麼?它打印「嗨!」期望的「毫秒」間隔的預期次數?我懷疑執行的JAR /類沒有被正確重建。 – 2011-11-29 06:33:29

+1

你在做什麼getdatatimer()?如果您在timerTask中再次安排了一些初始延遲爲0的事情,您可能會陷入無限循環。 –

回答

5

你的代碼看起來不錯,它不應該導致忙等待。可能是其他事情正在消耗CPU,你可以通過使用jconsole或jvisualvm中的探查器或檢查棧跟蹤來確定。

相關問題