guava/src/com/google/common/util/concurrent/Futures.java
@Beta
  @GwtIncompatible // java.util.concurrent.ScheduledExecutorService
  @SuppressWarnings("GoodTime") // should accept a java.time.Duration
  public static <O> ListenableFuture<O> scheduleAsync(
      AsyncCallable<O> callable,
      long delay,
      TimeUnit timeUnit,
      ScheduledExecutorService executorService) {
    TrustedListenableFutureTask<O> task = TrustedListenableFutureTask.create(callable);
    final Future<?> scheduled = executorService.schedule(task, delay, timeUnit);
    task.addListener(
        new Runnable() {
          @Override
          public void run() {
            // Don't want to interrupt twice
            scheduled.cancel(false);
          }
        },
        directExecutor());
    return task;
  }
@Beta
  @GwtIncompatible // java.util.concurrent.ScheduledExecutorService
  @SuppressWarnings("GoodTime") // should accept a java.time.Duration
  public static <O> ListenableFuture<O> scheduleAsync(
      AsyncCallable<O> callable,
      long delay,
      TimeUnit timeUnit,
      ScheduledExecutorService executorService) {
    TrustedListenableFutureTask<O> task = TrustedListenableFutureTask.create(callable);
    final Future<?> scheduled = executorService.schedule(task, delay, timeUnit);
    task.addListener(
        new Runnable() {
          @Override
          public void run() {
            // Don't want to interrupt twice
            scheduled.cancel(false);
          }
        },
        directExecutor());
    return task;
  }
@ Beta @ GwtIncompatible // java.util.concurrent.ScheduledExecutorService @ SuppressWarnings ( "GoodTime" ) // should accept a java.time.Duration public static < O > ListenableFuture < O > scheduleAsync ( AsyncCallable < O > callable , long delay , TimeUnit timeUnit , ScheduledExecutorService executorService ) { TrustedListenableFutureTask < O > task = TrustedListenableFutureTask . create ( callable ) ; final Future < ? > scheduled = executorService . schedule ( task , delay , timeUnit ) ; task . addListener ( new Runnable ( ) { @ Override public void run ( ) { // Don't want to interrupt twice scheduled . cancel ( false ) ; } } , directExecutor ( ) ) ; return task ; }
Schedules {@code callable} on the specified {@code executor}, returning a {@code Future}.

@throws RejectedExecutionException if the task cannot be scheduled for execution
@since 23.0
Schedules { @code callable } on the specified { @code executor } returning a { @code Future } .