driver-core/src/main/com/mongodb/internal/connection/ConcurrentPool.java
@Override
    public T get(final long timeout, final TimeUnit timeUnit) {
        if (closed) {
            throw new IllegalStateException("The pool is closed");
        }

        if (!acquirePermit(timeout, timeUnit)) {
            throw new MongoTimeoutException(String.format("Timeout waiting for a pooled item after %d %s", timeout, timeUnit));
        }

        T t = available.pollLast();
        if (t == null) {
            t = createNewAndReleasePermitIfFailure(false);
        }

        return t;
    }
@Override
    public T get(final long timeout, final TimeUnit timeUnit) {
        if (closed) {
            throw new IllegalStateException("The pool is closed");
        }

        if (!acquirePermit(timeout, timeUnit)) {
            throw new MongoTimeoutException(String.format("Timeout waiting for a pooled item after %d %s", timeout, timeUnit));
        }

        T t = available.pollLast();
        if (t == null) {
            t = createNewAndReleasePermitIfFailure(false);
        }

        return t;
    }
@ Override public T get ( final long timeout , final TimeUnit timeUnit ) { if ( closed ) { throw new IllegalStateException ( "The pool is closed" ) ; } if ( ! acquirePermit ( timeout , timeUnit ) ) { throw new MongoTimeoutException ( String . format ( "Timeout waiting for a pooled item after %d %s" , timeout , timeUnit ) ) ; } T t = available . pollLast ( ) ; if ( t == null ) { t = createNewAndReleasePermitIfFailure ( false ) ; } return t ; }
Gets an object from the pool - will block if none are available

@param timeout  negative - forever 0        - return immediately no matter what positive ms to wait
@param timeUnit the time unit of the timeout
@return An object from the pool, or null if can't get one in the given waitTime
@throws MongoTimeoutException if the timeout has been exceeded
Gets an object from the pool - will block if none are available