對(duì)于線(xiàn)程池大部分人可能會(huì)用,也知道為什么用。無(wú)非就是任務(wù)需要異步執(zhí)行,再者就是線(xiàn)程需要統(tǒng)一管理起來(lái)。對(duì)于從線(xiàn)程池中獲取線(xiàn)程,大部分人可能只知道,我現(xiàn)在需要一個(gè)線(xiàn)程來(lái)執(zhí)行一個(gè)任務(wù),那我就把任務(wù)丟到線(xiàn)程池里,線(xiàn)程池里有空閑的線(xiàn)程就執(zhí)行,沒(méi)有空閑的線(xiàn)程就等待。實(shí)際上對(duì)于線(xiàn)程池的執(zhí)行原理遠(yuǎn)遠(yuǎn)不止這么簡(jiǎn)單。
在Java并發(fā)包中提供了線(xiàn)程池類(lèi)——ThreadPoolExecutor,實(shí)際上更多的我們可能用到的是Executors工廠類(lèi)為我們提供的線(xiàn)程池:newFixedThreadPool、newSingleThreadPool、newCachedThreadPool,這三個(gè)線(xiàn)程池并不是ThreadPoolExecutor的子類(lèi),關(guān)于這幾者之間的關(guān)系,我們先來(lái)查看ThreadPoolExecutor,查看源碼發(fā)現(xiàn)其一共有4個(gè)構(gòu)造方法。
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)
首先就從這幾個(gè)參數(shù)開(kāi)始來(lái)了解線(xiàn)程池ThreadPoolExecutor的執(zhí)行原理。
corePoolSize:核心線(xiàn)程池的線(xiàn)程數(shù)量
maximumPoolSize:最大的線(xiàn)程池線(xiàn)程數(shù)量
keepAliveTime:線(xiàn)程活動(dòng)保持時(shí)間,線(xiàn)程池的工作線(xiàn)程空閑后,保持存活的時(shí)間。
unit:線(xiàn)程活動(dòng)保持時(shí)間的單位。
workQueue:指定任務(wù)隊(duì)列所使用的阻塞隊(duì)列
corePoolSize和maximumPoolSize都在指定線(xiàn)程池中的