title: Why ThreadPoolExecutor has BlockingQueue as its argument?
body: <p>I have tried creating and executing ThreadPoolExecutor with<BR></p>
  
  <pre><code>int poolSize = 2;
  int maxPoolSize = 3;
  ArrayBlockingQueue&lt;Runnable&gt; queue = new ArrayBlockingQueue&lt;Runnable&gt;(2);
  </code></pre>
  
  <p>If i try 7th,8th... task continuously <BR></p>
  
  <pre><code>  threadPool.execute(task);  
  </code></pre>
  
  <p>after the queue reached maximum size<BR> it is start throwing "RejectedExecutionException". Means i lost of adding those tasks.</p>
  
  <p>Here then what is the role of BlockingQueue if it is missing the tasks? Means why it is not waiting?</p>
  
  <p>From the definition of BlockingQueue</p>
  
  <blockquote>
    <p>A Queue that additionally supports operations that wait for the queue
    to become non-empty when retrieving an element, and wait for space to
    become available in the queue when storing an element.</p>
  </blockquote>
  
  <p><BR> Why cant we go for linkedlist (normal queue implementation instead of blocking queue)?</p>