code: public void run()
      {
          while( true )
          {
              try
              {
                  synchronized( this )
                  {
                      if( mainLoop() )
                      {
                          break;              // Exit the thread
                      }
                  }
              }
              catch( RuntimeException e )
              {
                  if( m_exceptionMonitor != null )
                  {
                      m_exceptionMonitor.exception( this, e );
                  }
              }
              catch( InterruptedException e )
              {
                  if( m_exceptionMonitor != null )
                  {
                      m_exceptionMonitor.exception( this, e );
                  }
              }
          }
      }
docs: When an object implementing interface <code>Runnable</code> is used
  to create a thread, starting the thread causes the object's
  <code>run</code> method to be called in that separately executing
  thread.
  <p/>
  The general contract of the method <code>run</code> is that it may
  take any action whatsoever.
  
  @see Thread#run()