code: @SuppressWarnings("WeakerAccess")
    public final boolean supply(Timeout timeout, Consumer<T> consumer)
        throws InterruptedException {
      T obj = claim(timeout);
      if (obj == null) {
        return false;
      }
      try {
        consumer.accept(obj);
        return true;
      } finally {
        obj.release();
      }
    }
docs: Claim an object from the pool and supply it to the given consumer, and then
  release it back to the pool.
  
  If an object cannot be claimed within the given timeout, then this method
  returns `false`. Otherwise, if an object was claimed and supplied to the
  consumer, the method returns `true`.
  @param timeout The timeout of the maximum permitted amount of time to wait
  for an object to become available. A timeout with a value of zero or less
  means that the call will do no waiting, preferring instead to return early
  if no objects are available.
  @param consumer The consumer to pass the claimed object to, if any. The
  consumer should avoid further claims, since having more than one object
  claimed at a time per thread is inherently deadlock prone.
  @return `true` if an object could be claimed within the given timeout and
  passed to the given consumer, or `false` otherwise.
  @throws InterruptedException if the thread was interrupted.
  @see #claim(Timeout) The `claim` method for more details on failure modes
  and memory effects.