code: protected Task addTask(final long first, final Runnable runnable,
                             final long period, boolean relative) {
  
          if (this.isShutdown) {
              throw new IllegalStateException("shutdown");
          }
  
          final Task task = new Task(first, runnable, period, relative);
  
          // sychronized
          this.taskQueue.addTask(task);
  
          // sychronized
          this.restart();
  
          return task;
      }
docs: Adds to the task queue a new Task object encapsulating the supplied
  Runnable and scheduling arguments.
  
  @param first the time of the task's first execution
  @param runnable the Runnable to execute
  @param period the task's periodicity
  @param relative if true, use fixed rate else use fixed delay scheduling
  @return an opaque reference to the internal task