@Override
    public void release(final PoolEntry<T, C> entry, final boolean reusable) {
        if (entry == null) {
            return;
        }
        if (closed.get()) {
            pool.release(entry, reusable);
            return;
        }
        final T route = entry.getRoute();
        final PerRoutePool<T, C> perRoutePool = perRouteCache.get(route);
        if (perRoutePool != null) {
            final long count = perRoutePool.release(entry, reusable);
            if (count > 0) {
                if (LOG.isDebugEnabled()) {
                    LOG.debug("Connection {} is being shared for message exchange multiplexing (lease count = {})",
                            ConnPoolSupport.getId(entry.getConnection()), count);
                }
                return;
            }
        }
        if (LOG.isDebugEnabled()) {
            LOG.debug("Releasing connection {} back to the pool", ConnPoolSupport.getId(entry.getConnection()));
        }
        pool.release(entry, reusable);
    }
Experimental connections pool implementation that acts as a caching facade in front of
a standard {@link ManagedConnPool} and shares already leased connections to multiplex
message exchanges over active HTTP/2 connections.
@param <T> route
@param <C> connection object

@since 5.5
httpclient5/src/main/java/org/apache/hc/client5/http/impl/nio/H2SharingConnPool.java