code: public void add(Object taskGroupId, Runnable task) {
          CountDownLatch latch = taskKeyToLatch.get(taskGroupId);
          if (latch == null)
              throw new IllegalArgumentException(
                  "Unknown task id: " + taskGroupId);
          if (task == null)
              throw new NullPointerException("Cannot add null tasks");                                           
          workQueue.offer(new CountingRunnable(task, latch));
      }
docs: Adds the provided task to the work queue on behalf of the task group
  identifier.  Note that unlike the {@link #run(Collection) run} method,
  this method returns immediately without waiting for the task to finish.
  
  @param taskGroupId an identifier associated with a set of tasks.
  @param task a task to run
  
  @throws IllegalArgumentException if the {@code taskGroupId} is not
  currently associated with any active taskGroup