long release(final PoolEntry<T, C> entry, final boolean reusable) {
            lock.lock();
            try {
                final C connection = entry.getConnection();
                if (!reusable || connection == null || !connection.isOpen()) {
                    entryMap.remove(entry);
                    return 0;
                } else {
                    final AtomicLong counter = entryMap.compute(entry, (e, c) -> {
                        if (c == null) {
                            return null;
                        }
                        final long count = c.decrementAndGet();
                        return count > 0 ? c : null;
                    });
                    return counter != null ? counter.get() : 0L;
                }
            } finally {
                lock.unlock();
            }
        }
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