code: public Object schedulePeriodicallyAt(final Date date, final long period,
                                           final Runnable runnable,
                                           final boolean relative)
                                           throws IllegalArgumentException {
  
          if (date == null) {
              throw new IllegalArgumentException("date == null");
          } else if (period <= 0) {
              throw new IllegalArgumentException("period <= 0");
          } else if (runnable == null) {
              throw new IllegalArgumentException("runnable == null");
          }
  
          return addTask(date.getTime(), runnable, period, relative);
      }
docs: Causes the specified Runnable to be executed periodically in the
  background, starting at the specified time.
  
  @return opaque reference to the internal task
  @param period the cycle period
  @param relative if true, fixed rate sheduling else fixed delay scheduling
  @param date time at which to execute the specified Runnable
  @param runnable the Runnable to execute
  @throws IllegalArgumentException if date or runnable is null, or
  period is <= 0