public boolean waitUntilDone(long timeout, TimeUnit unit) throws InterruptedException {
		lock.lockInterruptibly();
		try {
			if (!isDone()) {
				done.await(timeout, unit);
			}
			return isDone();
		}
		finally {
			lock.unlock();
		}
	}
A class to synchronize and track the progress of the items being processed by a concurrentQ. It 
provides various wait methods for when one item is completed or all items are completed.
Ghidra/Framework/Generic/src/main/java/generic/concurrent/ProgressTracker.java