code: public ServiceHandle<S> checkOut(ServiceEndPoint endPoint) throws Exception {
          checkNotNull(endPoint);
          _requestCount.incrementAndGet();
  
          try {
              long revision = _revisionNumber.incrementAndGet();
              S service = _pool.borrowObject(endPoint);
              ServiceHandle<S> handle = new ServiceHandle<>(service, endPoint);
  
              // Remember the revision that we've checked this service out on in case we need to invalidate it later
              _checkedOutRevisions.put(handle, revision);
  
              return handle;
          } catch (NoSuchElementException e) {
              _missCount.incrementAndGet();
  
              // This will happen if there are no available connections and there is no room for a new one,
              // or if a newly created connection is not valid.
              throw new NoCachedInstancesAvailableException(String.format("No cached instances available for endpoint: %s", endPoint));
          }
      }
docs: Retrieves a cached service instance for an end point that is not currently checked out.  If no idle cached
  instance is available and the cache is not full, a new one will be created, added to the cache, and then checked
  out.  Once the checked out instance is no longer in use, it should be returned by calling {@link #checkIn}.
  
  @param endPoint The end point to retrieve a cached service instance for.
  @return A service handle that contains a cached service instance for the requested end point.
  @throws NoCachedInstancesAvailableException If the cache has reached total maximum capacity, or maximum capacity
  for the requested end point, and no connections that aren't already checked out are available.