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

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

    FiniteDuration duration = FiniteDuration.apply(amount, unit);
    return toJava(delegate.delayed(duration, 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 amount The time to wait.
@param unit The units to use for the amount.
@param <A> the type of the completion's result.
@return the delayed CompletionStage wrapping supplier.