code: public void addItems(Iterable<T> items) {
          synchronized (this) {
              for (T i : items) {
                  this.items.add(i);
              }
              semaphore.release();
          }
      }
docs: Adds multiple items to the processing queue. Can be called even before the start.
  This method is preferred to calling addItem multiple times in row, because it will
  make synchronization only once.
  
  @param items Items to add.