code: private <W> void processWorkUnits(final Collection<W> workUnits, final LogNode log,
              final WorkUnitProcessor<W> workUnitProcessor) throws InterruptedException, ExecutionException {
          WorkQueue.runWorkQueue(workUnits, executorService, interruptionChecker, numParallelTasks, log,
                  workUnitProcessor);
          if (log != null) {
              log.addElapsedTime();
          }
          // Throw InterruptedException if any of the workers failed
          interruptionChecker.check();
      }
docs: Process work units.
  
  @param <W>
  the work unit type
  @param workUnits
  the work units
  @param log
  the log entry text to group work units under
  @param workUnitProcessor
  the work unit processor
  @throws InterruptedException
  if a worker was interrupted.
  @throws ExecutionException
  If a worker threw an uncaught exception.