每当我使用Thread.sleep();在do while循环中,提示告诉我,“在循环中调用Thread.sleep会导致性能问题。”我从很多其他网站和书籍中听到过这个。我可以使用什么呢?
以下是代码:
import javax.swing.*;
public class Delay {
public static void main(String[] args) throws Exception {
int difficulty;
difficulty = Integer.parseInt(JOptionPane
.showInputDialog("How good are you?\n" + "1 = evil genius...\n"
+ "10 = evil, but not a genius"));
boolean cont;
do {
cont = false;
System.out.println("12");
Thread.sleep(500);
String again = JOptionPane.showInputDialog("Play Again?");
if (again.equals("yes"))
cont = true;
} while (cont);
}
}
答案 0 :(得分:1)
尝试java.util.Timer和/或javax.swing.Timer。与他们一起玩,设置初始延迟,重复周期等。看看哪些适合您的需要。
请务必检查这两个计时器之间的差异,初学者请看一下这个问题:Why are there two Timer classes in Java(one under javax.swing, one under java.util )?
然后按照@BoristheSpider建议的那样尝试ScheduledExecutorService。
答案 1 :(得分:-1)
使用Thread.sleep
进行轮询或类似的更新机制是可行的方法。例如,如果你想每5毫秒重新绘制一个画布,那么就可以使用sleep(5)
。您还可以使用更精确的硬件计时器并减轻CPU的负担,但通常的方法是Thread.sleep
。