code: protected PoolWaitFuture<E> createFuture(final PoolKey<K> key) {
  		return new PoolWaitFuture<E>(lock) {
  			protected E getPoolObject(long timeout, TimeUnit unit) throws IOException, InterruptedException, TimeoutException {
  				return getBlockingUntilAvailableOrTimeout(key, timeout, unit, this);
  			}
  		};
  	}
docs: Creates a Future which will wait for the Keyed Object to become available or timeout
  @param key the Pool Key
  @return PoolWaitFuture