Java计时器任务比正常运行速度慢

时间:2013-12-10 12:21:16

标签: java timer

我正在编写的应用程序的一部分使用计时器系统。计时器应该每ms一次。

在我的天文台里,我有这些变量。

    private static final int DELAY_IN_MILLISECONDS = 0;
    private int intervalInMilliseconds = 1;

我像这样启动计时器:

        timer = new Timer();
        timer.schedule(new Task(), DELAY_IN_MILLISECONDS,
            getIntervalInMilliseconds());

然而,在一秒之后他只达到了大约+ - 100毫秒而不是1000毫秒。

虽然他过去工作得很好,但直到我为游戏的其他部分添加了代码。我很确定我在计时器上没有改变任何东西,但他变得比平常慢(他以前工作得很好)。

由于应用程序需要太多的CPU时间用于其他事情,我的计时器是否可能运行得更慢? (这是我正在制作的游戏)。如果是这样,解决这个问题的传统方法是什么?请记住,游戏比计时器运行更顺畅。

提前致谢!

编辑:有没有办法找出你的应用程序的哪个部分"瓶颈"它,比如检查他使用大部分资源的地方等?

2 个答案:

答案 0 :(得分:1)

如果计划的长期准确性是您所追求的,那么您应该使用Timer#scheduleAtFixedRate方法。如果您不断地延迟重新安排任务,那么Timer实例无法补偿其过去的时间错误。

如果短期准确性也是一个问题,那么您应该切换到Scheduled Executor Service,它使用更精确的低级技术来安排任务。

答案 1 :(得分:0)

我实际上有一些针对该问题的临时解决方案。 我停止计数每一个ms,只是做了+ = 15ms来计算睡眠();

计时器现在运行平稳,一分钟之后我的实际时间差异不到1秒。

感谢大家的帮助,但任何其他(不那么特别)的解决方案仍然非常受欢迎!

编辑:由于鲍里斯,我得到了这个方法,所以如果您愿意,可以将评论作为答案发布:)

相关问题