常量线程循环时间Java

时间:2014-02-01 09:38:23

标签: java multithreading

我希望有一个每秒循环一次的线程,例如一个旨在获得恒定帧速率的渲染循环。如果花费的时间超过允许的时间,那么循环显然会变慢。

感谢。

2 个答案:

答案 0 :(得分:3)

怎么样

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(0, delay, TimeUnit.MILLI_SECONDS, new Runnable() {
     public void run() {
         // do something
     }
});

long delay = .... 
long next = System.currentTimeMillis();
while(running) {
     // do something
     next += delay;
     long sleep = next - System.currentTimeMillis();
     if (sleep > 0)
          Thread.sleep(sleep);
}

答案 1 :(得分:0)

您需要考虑两种基本技术:

  1. 单独更新您的模型或世界状态以进行渲染。
  2. 如果您已经这样做了,您可以在渲染内容之前休眠/等待适当的时间,或者如果您落后于计划的时间表,则跳过渲染某些帧。
  3. 我可以推荐两个关于如何在java / android中实现类似游戏循环的好的tututorial。 关于基础知识的第一个是http://obviam.net/index.php/a-very-basic-the-game-loop-for-android/ 第二个重点是每秒帧数:http://obviam.net/index.php/the-android-game-loop/。我认为这些课程也适用于regualar java。