@Override
    public void backOff(final HttpRoute route) {
        final int curr = connPerRoute.getMaxPerRoute(route);
        final Instant now = Instant.now();

        lastRouteBackoffs.compute(route, (r, lastUpdate) -> {
            if (lastUpdate == null || now.isAfter(lastUpdate.plus(coolDown.get().toMilliseconds(), ChronoUnit.MILLIS))) {
                final int backedOffPoolSize = getBackedOffPoolSize(curr); // Exponential backoff
                connPerRoute.setMaxPerRoute(route, backedOffPoolSize);
                if (LOG.isDebugEnabled()) {
                    LOG.debug("Backoff applied for route: {}, new max connections: {}", route, connPerRoute.getMaxPerRoute(route));
                }
                return now;
            }
            return lastUpdate;
        });
    }
Reduces the number of maximum allowed connections for the specified route based on the exponential backoff algorithm.

@param route the HttpRoute for which the backoff needs to be applied
httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/AbstractBackoff.java