2014-01-23 45 views
0

当我在一个while循环中包含Thread.wait()时,我的IDE(NetBeans)告诉我这可能会导致性能问题,它如何以及它是否有绕过它的方式?Java Thread.wait()警告

例子:

while (timing){ 
     Thread.wait(10); 
     foo++; 
     } 
    //Started in a seperate thread before activating. 

编辑:感谢您的帮助,我会尝试使用 'ScheduledExecutorService的',而不是!

+0

同一问题在这里:http://stackoverflow.com/questions/3956512/java-performance-issue-with-thread-sleep – NickL

+0

给更多的背景,很难说如果它会更好地睡觉或等待没有更多的信息.​​.. – assylias

+0

Class'Thread'没有静态方法'wait'。我希望你没有声明一个名为'Thread'的变量。我们是在谈论相同的'java.lang.Thread'还是你的Thread另一个类? –

回答

0

您可能只想制作线程sleep,这就是您需要调用的方法的名称。

你叫Object#wait(),这是一个线程协调方法,并且你使用了一个明确的超时(一个相当短的)。我的猜测是,NetBeans警告你有关超时,因为通常我们使用Object#wait没有超时,如果我们使用超时,我们不会在一个循环中wait

现在,NetBeans还会在循环中警告您使用Thread.sleep(),因为通常情况下,如果要安排重复任务(即您正在执行的操作),您将使用ScheduledExecutorService。该服务能够为您的应用程序提供大量不同的计划任务,全部使用单个线程。在一个循环中明确写入Thread.sleep()不必要地占用整个线程(一个重量级的系统资源)什么也不做,只能在大部分时间进入休眠状态。