code: public void run(Object job) throws InterruptedException
      {
          if(job==null)
              return;
          try
          {
              PoolThread thread=(PoolThread)_pool.get(getMaxIdleTimeMs());
              if(thread!=null)
                  thread.run(this,job);
              else
              {
                  log.warn("No thread for "+job);
                  stopJob(null,job);
              }
          }
          catch(InterruptedException e)
          {
              throw e;
          }
          catch(Exception e)
          {
              log.warn(LogSupport.EXCEPTION,e);
          }
      }
docs: Run job. Give a job to the pool.
  
  @param job If the job is derived from Runnable, the run method is called, otherwise it is
  passed as the argument to the handle method.