code: @Override
      public void run() {
  
          boolean runOnce = (m_runnable != null);
  
          while (m_run) {
              setPriority(m_pool.getThreadPriority());
              try {
                  if (m_runnable == null) {
                      m_runnable = m_pool.getNextRunnable();
                  }
  
                  if (m_runnable != null) {
                      m_runnable.run();
                  }
              } catch (InterruptedException e) {
                  LOG.error(Messages.get().getBundle().key(Messages.LOG_THREAD_INTERRUPTED_1, getName()), e);
              } catch (Throwable t) {
                  LOG.error(Messages.get().getBundle().key(Messages.LOG_THREAD_ERROR_1, getName()), t);
              } finally {
                  if (runOnce) {
                      m_run = false;
                  }
                  m_runnable = null;
              }
          }
          if (LOG.isDebugEnabled()) {
              LOG.debug(Messages.get().getBundle().key(Messages.LOG_THREAD_SHUTDOWN_1, getName()));
          }
      }
docs: Loop, executing targets as they are received.<p>