如何通过计算机实现Java Timer?

时间:2013-05-18 23:34:42

标签: java timer

与Timer相关的网站上的文章讨论了如何使用Timer进行编程。

我问了一个不同的问题。 Java如何执行Timer方法?

由于据说通过不使用while循环检查当前时间是否是所需的时间点来避免耗时的工作,我认为Timer不是简单地通过使用while循环来连续检查和比较当前时间来实现的到期望的时间点。

谢谢!

2 个答案:

答案 0 :(得分:2)

  

我认为Timer不是简单地通过连续使用while循环来实现的   检查并将当前时间与所需时间点进行比较。

是的,是的。唯一的优化是;它使用基于nextExecutionTime的优先级队列来执行任务。

JavaDoc陈述

  

Timer对象是用于的单个后台线程   按顺序执行所有计时器的任务。计时器任务应该   快完成如果计时器任务需要很长时间才能完成,   它"猪#34;计时器的任务执行线程。反过来,这可能会延迟   后续任务的执行

Timer类包含

  1. TaskQueue这是TimerTasks的优先级队列,在nextExecutionTime上排序。
  2. TimerThread(queue)计时器的任务执行线程,它等待(queue.wait())计时器队列上的任务。
  3. TimerThreadprivate void mainLoop() {
    通过将while(true)nextExecutionTime

    进行比较,连续currentTimeMillis会继续检查任务
                        currentTime = System.currentTimeMillis();
                        executionTime = task.nextExecutionTime;
                        if (taskFired = (executionTime<=currentTime)) {
    

    如果它到达然后调用

                if (taskFired)  // Task fired; run it, holding no locks
                    task.run();
    

答案 1 :(得分:1)

根据javadoc

  

此课程不提供实时保证:它安排任务   使用Object.wait(long)方法。

如果您查看代码,您将找到一个名为main loop的方法。前几行复制在下面。

private void mainLoop() {
    while (true) {
        try {

并且......它在其中使用了一个while循环以及Object.wait()来进行等待。