code: public RetryPolicy<R> withJitter(Duration jitter) {
      Assert.notNull(jitter, "jitter");
      Assert.isTrue(jitter.toNanos() > 0, "jitter must be > 0");
      Assert.state(delay != null || delayMin != null, "A delay must be configured");
      Assert.state(jitterFactor == 0.0, "withJitter(double) has already been called");
      Assert.state(jitter.toNanos() <= delay.toNanos(), "jitter must be less than the configured delay");
      this.jitter = jitter;
      return this;
    }
docs: Sets the {@code jitter} to randomly vary retry delays by. For each retry delay, a random portion of the {@code
  jitter} will be added or subtracted to the delay. For example: a {@code jitter} of {@code 100} milliseconds will
  randomly add between {@code -100} and {@code 100} milliseconds to each retry delay.
  <p>
  Jitter should be combined with {@link #withDelay(Duration) fixed}, {@link #withDelay(long, long, ChronoUnit)
  random} or {@link #withBackoff(long, long, ChronoUnit) exponential backoff} delays.
  
  @throws NullPointerException if {@code jitter} is null
  @throws IllegalArgumentException if {@code jitter} is <= 0
  @throws IllegalStateException if no delay has been configured or {@link #withJitter(double)} has already been
  called