title: Why use different Queue when creating FixedThreadPool and CachedThreadPool?
body: <p>Executors#newFixedThreadPool:</p>
  
  <pre><code>public static ExecutorService newFixedThreadPool(int nThreads) {
      return new ThreadPoolExecutor(nThreads, nThreads,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue&lt;Runnable&gt;());
  }
  </code></pre>
  
  <p>Executors#newCachedThreadPool:</p>
  
  <pre><code>public static ExecutorService newCachedThreadPool() {
      return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                    60L, TimeUnit.SECONDS,
                                    new SynchronousQueue&lt;Runnable&gt;());
  }
  </code></pre>
  
  <p>Why the two threadPool use different Queue?
  I have looked up java doc about <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html" rel="noreferrer">LinkedBlockingQueue</a> and <a href="https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/SynchronousQueue.html" rel="noreferrer">SynchronousQueue</a>,but I still don't know why they are used here,Is performance considering or others?</p>