code: @Override
      public void run ()
      {
          try {
              _running = true;
              willStart();
  
              while (isRunning()) {
                  try {
                      iterate();
                  } catch (Exception e) {
                      handleIterateFailure(e);
                  }
              }
  
          } catch (Throwable t) {
              log.warning("Looping thread terminated with exception.", "thread", this, t);
  
          } finally {
              // running needs to be false even if this exited due to a Throwable from iterate
              _running = false;
              didShutdown();
          }
      }
docs: Processes the loop. Derived classes should override {@link #iterate} to perform whatever
  action needs to be performed inside the loop.