每当我使用Thread.sleep();在do循环中,提示告诉我:“在循环中调用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);
}
}发布于 2013-10-07 09:56:20
尝试java.util.Timer和/或javax.swing.Timer。和他们玩一会儿,设定初始的延迟,重复的时间等等,看看什么适合你的需要。
请务必检查这两个计时器之间的差异,首先请查看以下问题:为什么Java中有两个计时器类(一个在javax.swing下,一个在java.util下)?
然后试试ScheduledExecutorService,就像@BoristheSpider已经建议的那样。
发布于 2013-10-06 22:04:10
使用Thread.sleep进行轮询或类似的更新机制是可以的。例如,如果您希望每隔5毫秒重新绘制画布,则可以使用sleep(5)。您也可以使用硬件定时器,这将是更准确和减轻CPU,但通常的方法正是Thread.sleep。
https://stackoverflow.com/questions/19214361
复制相似问题