code: public final ScheduledHandle schedule(
        final Runnable task, long delay, TimeUnit unit, ScheduledExecutorService timerService) {
      final ManagedRunnable runnable = new ManagedRunnable(task);
      ScheduledFuture<?> future = timerService.schedule(new Runnable() {
          @Override
          public void run() {
            execute(runnable);
          }
  
          @Override
          public String toString() {
            return task.toString() + "(scheduled in SynchronizationContext)";
          }
        }, delay, unit);
      return new ScheduledHandle(runnable, future);
    }
docs: Schedules a task to be added and run via {@link #execute} after a delay.
  
  @param task the task being scheduled
  @param delay the delay
  @param unit the time unit for the delay
  @param timerService the {@code ScheduledExecutorService} that provides delayed execution
  
  @return an object for checking the status and/or cancel the scheduled task