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