關於Executors.newFixedThreadPool什麼時候建立新線程

    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

相關文章
相關標籤/搜索