的定義ExecutorService.newCachedThreadPool()是public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), threadFactory);}它創(chuàng)建一個(gè)帶有游泳池corePoolSize = 0,maximumPoolSize = Integer.MAX_VALUE和一個(gè)無界隊(duì)列。但是在它的文檔中ThreadPoolExecutor說:當(dāng)在方法 execute(java.lang.Runnable) 中提交新任務(wù),并且運(yùn)行的線程少于 corePoolSize 時(shí),即使其他工作線程空閑,也會(huì)創(chuàng)建一個(gè)新線程來處理請(qǐng)求。如果運(yùn)行的線程多于 corePoolSize 但少于 maximumPoolSize ,則只有在隊(duì)列已滿時(shí)才會(huì)創(chuàng)建新線程。那么corePoolSize = 0在這種情況下如何工作?最初,有 0 個(gè)線程,所以雖然它在文檔中沒有說,但我認(rèn)為它會(huì)為提交的第一個(gè)任務(wù)創(chuàng)建一個(gè)新線程。但是,現(xiàn)在我們有 1 個(gè)線程 > corePoolSize = 0,和 1 個(gè)線程 < maximumPoolSize = Integer.MAX_VALUE,根據(jù)上面的文檔“只有當(dāng)隊(duì)列已滿時(shí)才會(huì)創(chuàng)建一個(gè)新線程”,但是隊(duì)列是無界的永遠(yuǎn)不會(huì)創(chuàng)建新線程,而我們只能使用 1 個(gè)線程?
corePoolSize=0 如何為 ThreadPoolExecutor 工作?
拉風(fēng)的咖菲貓
2021-08-25 11:05:03