public AsyncConnectionRequest requestConnection() {
   if (this.shutdown) {
     throw new IllegalStateException("Connection manager has been shut down");
   }
   AsyncConnectionRequest request = new AsyncConnectionRequest();
   synchronized (this.lock) {
     while (!this.availableConns.isEmpty()) {
       NHttpClientConnection conn = this.availableConns.remove();
       if (conn.isOpen()) {
         System.out.println("Re-using persistent connection");
         request.setConnection(conn);
         break;
       } else {
         this.allConns.remove(conn);
       }
     }
     if (!request.isCompleted()) {
       this.pendingRequests.add(request);
       processRequests();
     }
   }
   return request;
 }