docs: @Override
  	public void put(E e) throws InterruptedException {
  		if (sizeLimit > 0){
  	        final ReentrantLock lock = this.sizeLimitLock;
  	        lock.lockInterruptibly();
  	        try {
  	            try {
  	                while (size() >= sizeLimit)
  	                    withinSizeLimit.await();
  	            } catch (InterruptedException ie) {
  	            	withinSizeLimit.signal(); // propagate to non-interrupted thread
  	                throw ie;
  	            }
  	            queue.put(e);
  	        } finally {
  	            lock.unlock();
  	        }
  		}else{
  			queue.put(e);
  		}
  	}