/**
  * @throws RejectedExecutionException {@inheritDoc}
  * @throws NullPointerException {@inheritDoc}
  */
 public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) {
   if (callable == null || unit == null) throw new NullPointerException();
   RunnableScheduledFuture<V> t =
       decorateTask(callable, new ScheduledFutureTask<V>(callable, triggerTime(delay, unit)));
   delayedExecute(t);
   return t;
 }
 /**
  * @throws RejectedExecutionException {@inheritDoc}
  * @throws NullPointerException {@inheritDoc}
  */
 public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) {
   if (command == null || unit == null) throw new NullPointerException();
   RunnableScheduledFuture<?> t =
       decorateTask(
           command, new ScheduledFutureTask<Void>(command, null, triggerTime(delay, unit)));
   delayedExecute(t);
   return t;
 }
 /**
  * @throws RejectedExecutionException {@inheritDoc}
  * @throws NullPointerException {@inheritDoc}
  * @throws IllegalArgumentException {@inheritDoc}
  */
 public ScheduledFuture<?> scheduleWithFixedDelay(
     Runnable command, long initialDelay, long delay, TimeUnit unit) {
   if (command == null || unit == null) throw new NullPointerException();
   if (delay <= 0) throw new IllegalArgumentException();
   ScheduledFutureTask<Void> sft =
       new ScheduledFutureTask<Void>(
           command, null, triggerTime(initialDelay, unit), unit.toNanos(-delay));
   RunnableScheduledFuture<Void> t = decorateTask(command, sft);
   sft.outerTask = t;
   delayedExecute(t);
   return t;
 }