2011-11-29 254 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中的探查器或检查栈跟踪来确定。

相关问题