core/play/src/main/java/play/libs/concurrent/DefaultFutures.java
@Override
  public <A> CompletionStage<A> delayed(
      final Callable<CompletionStage<A>> callable, Duration duration) {
    requireNonNull(callable, "Null callable");
    requireNonNull(duration, "Null duration");

    FiniteDuration finiteDuration =
        FiniteDuration.apply(duration.toMillis(), TimeUnit.MILLISECONDS);
    return toJava(delegate.delayed(finiteDuration, Scala.asScalaWithFuture(callable)));
  }
@Override
  public <A> CompletionStage<A> delayed(
      final Callable<CompletionStage<A>> callable, Duration duration) {
    requireNonNull(callable, "Null callable");
    requireNonNull(duration, "Null duration");

    FiniteDuration finiteDuration =
        FiniteDuration.apply(duration.toMillis(), TimeUnit.MILLISECONDS);
    return toJava(delegate.delayed(finiteDuration, Scala.asScalaWithFuture(callable)));
  }
Create a CompletionStage which, after a delay, will be redeemed with the result of a given
supplier. The supplier will be called after the delay.

@param callable the input completion stage that is delayed.
@param duration to wait.
@param <A> the type of the completion's result.
@return the delayed CompletionStage wrapping supplier.