code: public static <T> T runWithSleepThenReturnValueThrowOnInterrupt(long milliseconds, ReturningRunnable<T> runnable) {
  
      Assert.isTrue(milliseconds > 0, "Milliseconds [%d] must be greater than 0", milliseconds);
  
      T returnValue = runnable.run();
  
      if (!ThreadUtils.sleep(milliseconds, 0)) {
        throw new SleepDeprivedException(String.format("Failed to wait for [%d] millisecond(s)", milliseconds));
      }
  
      return returnValue;
    }
docs: Runs the given {@link ReturningRunnable} object and then causes the current, calling {@link Thread} to sleep
  for the given number of milliseconds before returning a value.
  
  This utility method can be used to simulate a long running, expensive operation.
  
  @param <T> {{@link Class} type of the {@link ReturningRunnable} return value.
  @param milliseconds a long value with the number of milliseconds for the current {@link Thread} to sleep.
  @param runnable {@link ReturningRunnable} object to run; must not be {@literal null}.
  @return the value returned by the {@link ReturningRunnable}.
  @throws IllegalArgumentException if milliseconds is less than equal to 0.
  @throws SleepDeprivedException if the current {@link Thread} is interrupted while sleeping.
  @see org.cp.elements.lang.RunnableUtils.ReturningRunnable#run()
  @see org.cp.elements.lang.concurrent.ThreadUtils#sleep(long, int)