code: public void run() {
          loadSchema();
          dumpSchema();
          m_tableIterator = m_appDef.getTableDefinitions().values().iterator();
          
          m_logger.info("Starting {} workers", m_config.workers);
          long startTime = (new Date()).getTime();
          for (int workerNo = 1; workerNo <= m_config.workers; workerNo++) {
              DumpWorker dumpWorker = new DumpWorker(workerNo);
              dumpWorker.start();
              m_workerList.add(dumpWorker);
          }
          
          for (DumpWorker dumpWorker : m_workerList) {
              try {
                  dumpWorker.join();
              } catch (InterruptedException e) {
                  // ignore
              }
          }
          
          long stopTime = System.currentTimeMillis();
          m_logger.info("Total tables dumped:    {}", m_totalTables.get());
          m_logger.info("Total objects dumped:   {}", m_totalObjects.get());
          m_logger.info("Total bytes written:    {}", m_totalBytes.get());
          long totalMillis = stopTime - startTime;
          m_logger.info("Total time for dump:    {}", Utils.formatElapsedTime(totalMillis));
          m_logger.info("Average objects/sec:    {}", ((m_totalObjects.get() * 1000) / totalMillis));
          m_logger.info("Average bytes/sec:      {}", ((m_totalBytes.get() * 1000) / totalMillis));
      }
docs: Performs the CSV dump as defined by the {@link CSVConfig} singleton object.
  This method can be called instead of {@link #main(String[])} for programmatic
  access. Parameters should be set first by direct access to the CSVConfig
  object or by calling {@link CSVConfig#set(String, String)}.