Executors.newFixedThreadPool 本意是建立一個固定大小的線程池,但這個線程池是什麼執行的呢?java
一、當一個任務提交執行後,就會先判斷是否線程池的數量已經達到上限,若是沒有則建立新的線程來執行任務,即便原來建立過的線程是空閒的也不會使用。看源碼:this
private boolean addIfUnderCorePoolSize(Runnable firstTask) { Thread t = null; final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { if (poolSize < corePoolSize && runState == RUNNING) t = addThread(firstTask); } finally { mainLock.unlock(); } if (t == null) return false; t.start(); return true; }
即只要線程池沒有滿就會建立新的線程,並不會由於線程池的其餘線程是空閒的就不建立新線程spa