code: public void release(T element) {
      try {
        if (recycle(element)) {
          elements.add(element);
        }
      } finally {
        semaphore.release();
      }
    }
docs: Returns an element to the pool of available elements. The element must
  have been obtained from this pool through obtain(). The recycle() method
  is called before the element is available for obtain().
  
  @param element the element to be returned