code: @FFDCIgnore(value = { InterruptedException.class })
      public Client checkoutClient() {
          Client client = null;
  
          try {
              // need to poll here as the dequeue can be permanently emptied by close method at any time
              while (client == null && numClientsClosed.get() == 0) {
                  client = clients.poll(200, TimeUnit.MILLISECONDS);
              }
          } catch (InterruptedException e) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled())
                  Tr.event(tc, "InterruptedException during checkout");
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
              int clientHash = (client != null) ? client.hashCode() : 0;
              Tr.event(tc, "post-checkout - (" + clientHash + ") " + (numClients - clients.remainingCapacity()) + " of " + numClients + " clients available.");
          }
          return client;
      }
docs: /*
  Checks out a client for use by the caller. This method waits if necessary until a client is available or until pool is closed.
  May return null if InterruptedException occurs during checkout, or if pool is closed during checkout.