private DataModelGenerator getDataModelIfReadyToGenerate () {
    long lastStart = 0;
    DataModelGenerator lastDmg=null;

    if ((-1 != staller) && (staller != id)) return null;

    // Determine most recent running worker's dmg.
    for (int i=0; (i < instances.length); ++i) {
      DataModelGenerator d = instances[i].dmg;
      if ((null != d) && (lastStart < instances[i].start)) {
        lastStart = instances[i].start;
        lastDmg = d;
      }
    }

    // Look for latest time.  If none start immediately.  Otherwise sleep AverageWait/(CPU.count - 1) then start.
    if ((lastStart + durationAverage / instances.length) <= System.currentTimeMillis()) { // Is it time to generate a new model?
      start = System.currentTimeMillis();
      System.out.print("\n!"+id+"! getDataModelIfReadyToGenerate " + start/1000 + "  ");
      DataModelGenerator newDmg = (new DataModelGenerator(0, spreadCountMin)); // 0 = all rows
      if (null == lastDmg) return newDmg;
      if ((newDmg.lastResponseID != lastDmg.lastResponseID) &&
           (newDmg.responseCount != lastDmg.responseCount)) {
        staller = -1; // Remove pipeline stall.  All threads can query the DB for changes.
        return newDmg;
      } else {
        staller = id; // Stall pipeline.  Only this thread will check the DB for changes now.
      }
    }

    return null;
  }