我应该使用Thread.sleep对其他程序好吗?

时间:2012-06-30 22:44:59

标签: java

我通常使用主要的“while”循环在Java中编写(小型)游戏,如下所示:

while(running) {
    time = getTime();
    if(time - oldTime > 0.01) {
        tick(time - oldTime);
        oldTime = getTime();
    } 
}

我这样做是为了让程序每秒有最大帧数,但我听说Thread.sleep允许其他线程执行。我应该添加Thread.sleep(1)(或其他一些低毫秒)以允许计算机上的其他线程?这更像是一个良好的编程实践而不是表现的问题,并不是真的有必要,但我喜欢制作可靠和不合理的节目。

2 个答案:

答案 0 :(得分:4)

不,你不需要这样做。

所有现代抢占式多任务系统都会将时间分配给其他线程以允许它们执行。你不需要sleep()来容纳这个,除非你想在一段时间内强制放弃对其他线程的控制。

你可能想要这样做的唯一一次就是你要占用多核系统上的所有核心,并且你想要一个长期运行的,计算密集型的任务在后台安静地完成而不会明显地影响其他行动同时进行。

答案 1 :(得分:4)

我已经成功构建了使用Timer更新图形的游戏。阅读福利here。一般而言,Robert是正确的,您不需要 来执行此操作。我发现通常归结为在游戏动画FPS方面找到一个甜蜜点,而不是对其他过程很好。