code: public void submitDifferencers()
      {
          assert !failed;
          List<Differencer> differencers = new ArrayList<>();
          // We need to difference all trees one against another
          for (int i = 0; i < trees.size() - 1; ++i)
          {
              TreeResponse r1 = trees.get(i);
              for (int j = i + 1; j < trees.size(); ++j)
              {
                  TreeResponse r2 = trees.get(j);
                  Differencer differencer = new Differencer(desc, r1, r2);
                  differencers.add(differencer);
                  logger.debug("Queueing comparison {}", differencer);
              }
          }
          waitForSync = new AtomicInteger(differencers.size());
          for (Differencer differencer : differencers)
              taskExecutor.submit(differencer);
  
          trees.clear(); // allows gc to do its thing
      }
docs: Submit differencers for running.
  All tree *must* have been received before this is called.