code: public void submit(Runnable task)
      {
          queue.add(task);
          while(true)
          {
              long cur = combinedState.get();
              int shutdown = (int)(cur >> 63) & 1;
              if (shutdown != 0)
              {
                  throw new RejectedExecutionException("ThreadExecutor is already shutdown");
              }
              int currentThreads = ((int) (cur >> 32)) & 0x7FFFFFFF;
              int sizeMinusIdle = (int)(cur & 0xFFFFFFFFL);
              if (currentThreads < maxThreads && sizeMinusIdle >= 0)
              {
                  currentThreads++;
                  long next = combineStates(currentThreads, sizeMinusIdle, shutdown);
                  if (combinedState.compareAndSet(cur, next))
                  {
                      ThreadGroup localThreadGroup = threadGroup;
                      if (localThreadGroup.isDestroyed())
                      {
                          synchronized (this)
                          {
                              if (this.threadGroup.isDestroyed())
                              {
                                  localThreadGroup = new ThreadGroup(this.name);
                                  this.threadGroup = localThreadGroup;
                              }
                          }
                      }
                      new ExecutorThread(name + "-" + poolNumber + "-" + threadId.incrementAndGet()).start();
                      break;
                  }
              }
              else
              {
                  sizeMinusIdle++;
                  if (trySettingState(cur, currentThreads, sizeMinusIdle, shutdown)) break;
              }
          }
      }
docs: Submits a Runnable task for execution and returns a Future
  representing that task. The Future's <tt>get</tt> method will
  return <tt>null</tt> upon <em>successful</em> completion.
  
  @param task the task to submit