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

Java 我应该使用Thread.sleep来对其他程序友好吗?,java,Java,我通常用Java编写(小型)游戏,使用一个主“while”循环,有点像这样: while(running) { time = getTime(); if(time - oldTime > 0.01) { tick(time - oldTime); oldTime = getTime(); } } 我这样做是为了使程序每秒具有最大帧数,但我听说Thread.sleep允许其他线程执行。我是否应该添加一个Thread.sleep(1)

我通常用Java编写(小型)游戏,使用一个主“while”循环,有点像这样:

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

我这样做是为了使程序每秒具有最大帧数,但我听说Thread.sleep允许其他线程执行。我是否应该添加一个Thread.sleep(1)(或其他较低的毫秒数)以允许计算机上的其他线程?这与其说是性能问题,不如说是一个良好编程实践的问题,其实这并不是必须的,但我喜欢制作可靠且不受限制的程序。

不,您不需要这样做

所有现代抢占式多任务系统都将时间分配给其他线程,以允许它们执行。您不需要
sleep()
来适应这种情况,除非您想强制将控制权让给其他线程一段时间


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

我已经成功地构建了使用计算机更新图形的游戏。仔细阅读这些好处。不过,一般来说,这是正确的,您不需要这样做。我发现这通常归结为找到游戏动画FPS的最佳点,而不是对其他进程友好。

这取决于具体情况。您是否计划在游戏运行时进行其他繁重的计算?此外,Thread.sleep()只会影响同一虚拟机中的其他线程。不是其他应用。对于其他应用程序,操作系统调度程序可能足以确保公平性。另请参阅。