public void offer(Iterator<I> iterator) throws InterruptedException {
		lock.lockInterruptibly();
		try {

			while (iterator.hasNext()) {
				I next = iterator.next();

				if (!queue.offer(next)) {
					// must be full...wait until space is available
					tracker.waitForNext();
					queue.offer(next);
				}

				tracker.itemsAdded(1);
				fillOpenProcessingSlots();
			}
		}
		finally {
			lock.unlock();
		}
	}
Allows clients to use a bounded queue (such as a {@link LinkedBlockingQueue} to control
how many items get placed into this queue at one time.  Calling the <code>add</code> methods
will place all items into the queue, which for a large number of items, can consume a
large amount of memory.  This method will block once the queue at maximum capacity,
continuing to add new items as existing items on the queue are processed.
<p>
To enable blocking on the queue when it is full, construct this <code>ConcurrentQ</code>
with an instance of {@link BlockingQueue}.

@param iterator An iterator from which items will be taken.
@throws InterruptedException if this queue is interrupted while waiting to add more items
Ghidra/Framework/Generic/src/main/java/generic/concurrent/ConcurrentQ.java