当我在一个while循环中包含Thread.wait()时,我的IDE(NetBeans)告诉我这可能会导致性能问题,它怎么可能并且有什么方法可以解决它?
示例:
while (timing){
Thread.wait(10);
foo++;
}
//Started in a seperate thread before activating.
编辑:感谢您的帮助,我将尝试使用' ScheduledExecutorService'代替!
答案 0 :(得分:0)
您可能只想创建线程sleep
,这就是您需要调用的方法的名称。
您调用Object#wait()
,这是线程协调方法,并且您使用了明确的超时(相当短的)。我的猜测是NetBeans正在警告你超时,因为通常我们使用Object#wait
而没有超时,如果我们使用超时,我们就不会在循环中wait
。
现在,NetBeans还会警告您在循环中使用Thread.sleep()
,因为通常情况下,如果您想安排重复任务(这就是您正在做的事情),您将使用ScheduledExecutorService
。该服务能够围绕您的应用程序提供许多不同的计划任务,所有这些任务都使用单个线程。在循环中显式写Thread.sleep()
不必要地占用整个线程(一个重量级的系统资源),除了大部分时间都在睡觉之外什么都不做。