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

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

因为据说通过不使用while循环来检查当前时间是否是所需时间点来避免耗时的工作,所以我认为不能简单地通过使用while循环来连续检查并将当前时间与所需时间进行比较来实现Timer时间点。

谢谢!

最佳答案



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

JavaDoc状态



计时器类包含

  • TaskQueue是TimerTasks的优先级队列,在nextExecutionTime上排序。
  • TimerThread(queue)计时器的任务执行线程,该线程等待(queue.wait())等待计时器队列上的任务。
  • TimerThread具有private void mainLoop() {,其中连续while(true)将通过比较nextExecutionTimecurrentTimeMillis来继续检查任务
                        currentTime = System.currentTimeMillis();
                        executionTime = task.nextExecutionTime;
                        if (taskFired = (executionTime<=currentTime)) {
    

    如果到达了,然后打电话
                if (taskFired)  // Task fired; run it, holding no locks
                    task.run();
    

    10-04 11:23