code: @Override
    public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
  	this.lock.lock();
  	try {
  	  if (this.completed) {
  		return this.result;
  	  }
  	  this.result = getPoolObject(timeout, unit);
  	  this.completed = true;
  	  return result;
  	} catch (IOException ex) {
  	  this.completed = true;
  	  this.result = null;
  	  throw new ExecutionException(ex);
  	} finally {
  	  this.lock.unlock();
  	}
    }
docs: {@inheritDoc}