code: private void mainLoop() {
          for (@AutoreleasePool int i = 0;;) {
              try {
                  TimerTask task;
                  boolean taskFired;
                  synchronized(queue) {
                      // Wait for queue to become non-empty
                      while (queue.isEmpty() && newTasksMayBeScheduled)
                          queue.wait();
                      if (queue.isEmpty())
                          break; // Queue is empty and will forever remain; die
  
                      // Queue nonempty; look at first evt and do the right thing
                      long currentTime, executionTime;
                      task = queue.getMin();
                      synchronized(task.lock) {
                          if (task.state == TimerTask.CANCELLED) {
                              queue.removeMin();
                              continue;  // No action required, poll queue again
                          }
                          currentTime = System.currentTimeMillis();
                          executionTime = task.nextExecutionTime;
                          if (taskFired = (executionTime<=currentTime)) {
                              if (task.period == 0) { // Non-repeating, remove
                                  queue.removeMin();
                                  task.state = TimerTask.EXECUTED;
                              } else { // Repeating task, reschedule
                                  queue.rescheduleMin(
                                    task.period<0 ? currentTime   - task.period
                                                  : executionTime + task.period);
                              }
                          }
                      }
                      if (!taskFired) // Task hasn't yet fired; wait
                          queue.wait(executionTime - currentTime);
                  }
                  if (taskFired)  // Task fired; run it, holding no locks
                      task.run();
              } catch(InterruptedException e) {
              }
          }
      }
docs: The main timer loop.  (See class comment.)