title: Could not start more threads despite using Executors
body: <p>i have been advised to use <code>Executors.newCachedThreadPool()</code> which will be able to solve problems when over-spawning threads.</p>
  
  <p>However there is still an error when the number of threads is growing past a certain point. Is there anyway to allow a thread to wait itself while waiting for system resources to be available?</p>
  
  <pre><code>[WARN ] Thread table can't grow past 16383 threads.
  
  [ERROR][thread ] Could not start thread pool-1-thread-16114. errorcode -1
  Exception in thread "Main Thread" java.lang.Error: errorcode -1
      at java.lang.Thread.start0(Native Method)
      at java.lang.Thread.start(Thread.java:640)
      at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727)
      at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:657)
      at sg.java.executors_helloworld.App.main(App.java:15)
  
  public class App {
      public static void main(String args[]) {
          ExecutorService es = Executors.newCachedThreadPool();
  
          long time = System.currentTimeMillis();
  
          for (int i = 0; i &lt; 1000000; i++) {
              es.execute(new Car());
          }
  
          long completedIn = System.currentTimeMillis() - time;
  
          System.out.println(DurationFormatUtils.formatDuration(completedIn,
                  "HH:mm:ss:SS"));
      }
  }
  
  
  
  public class Car implements Runnable {
      public void run() {
          System.out.println("Car &lt;" + Thread.currentThread().getName()
                  + "&gt; doing something");
  
          try {
              Thread.sleep(10 * 1000);
          } catch (InterruptedException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
  }
  </code></pre>