不使用Thread.sleep()让一些东西等待?

我试图用一些字符串来介绍一个我希望等待另一个字符串弹出的游戏,并且我不直接想使用Thread.sleep()让它等待,因为我不确定是否这是最好的选择。 有没有其他方法可以让某些东西等待而不是让线程睡眠,或者我只是让线程睡眠?

如果这是一个游戏,你不应该使用睡眠或计时器。

通常,游戏具有自己的内部时钟机制。 这意味着您将尝试尽可能快地渲染帧。 您将使用当前游戏时间调用OnRender方法。 您可以使用它来确定是否有足够的时间转到下一个屏幕。

这意味着您将在第1帧中获得时间点A.您将在第2帧中获得Delta或其他时间点B.您可以通过使用增量或自己计算增量来确定已经过了多少时间。 对于计时情况,这是一种非常有效的机制,并且当游戏是单线程时效果很好。 任何程序的想法都是永远不会阻止任何事情。

通常阻塞的原因是I / O,例如从磁盘读取,网络或将数据放在GPU上。 在您的情况下,您可以做任何事情而不会阻止

这是https://gamedev.stackexchange.com/questions/1589/fixed-time-step-vs-variable-time-step上的一个不错的页面

有一个标准的机制: Object.wait()和Object.notify() (带有重载/变体)。 您只需等待某个事件发生在一个线程中,而其他一些线程负责通知您(或所有人,如果是notifyAll )该事件。

您还可以使用java.util.concurrent引入的新Condition机制。

如果你在游戏中制作它,为什么不尝试在libgdx中使用像Actions这样的东西呢? 你只是把不同的演员连在一起。 每当像能见度或位置这样的属性达到您想要的值时,您就会触发下一个操作。 在游戏的每个更新循环期间检查属性条件。

或者如果它是一个swing应用程序,请使用计时器来检查这些属性。

 long t1=0,t2=0; long nanoWaitTime=10000; //to wait at least 10000 nano-seconds t1=System.nanoTime(); //start waiting long count=0; boolean releaseCpuResources=true; while(Math.abs(t2-t1)1000)Thread.sleep(1);//after too many iterations, cpu gets overwhelmed //so Thread.sleep makes it better for large waiting //times //but precision is lost. Like uncertainity principle //but in a quantized fashion } } // here continue to work after waiting 

对于所有cpu,分辨率或精度可能不是您想要的。