code: public static Executor delayedExecutor(long delay, TimeUnit unit, Executor executor) {
      if (unit == null || executor == null)
        throw new NullPointerException();
      return new DelayedExecutor(delay, unit, executor);
    }
docs: Returns a new Executor that submits a task to the given base executor after the given delay (or
  no delay if non-positive). Each delay commences upon invocation of the returned executor's
  {@code execute} method.
  
  @param delay how long to delay, in units of {@code unit}
  @param unit a {@code TimeUnit} determining how to interpret the {@code delay} parameter
  @param executor the base executor
  @return the new delayed executor
  @since 9