@Override
    public long getDelay(TimeUnit unit) {
      long baseDelay = wrapped.getDelay(unit);
      long spreadTime = (long) (baseDelay * spread);
      long delay = spreadTime <= 0
        ? baseDelay
        : baseDelay + ThreadLocalRandom.current().nextLong(-spreadTime, spreadTime);
      // Ensure that we don't roll over for nanoseconds.
      return (delay < 0) ? baseDelay : delay;
    }
Class that basically just defers to the wrapped future. The only exception is getDelay
hbase-common/src/main/java/org/apache/hadoop/hbase/JitterScheduledThreadPoolExecutorImpl.java