最近看阿里的 Java開發(fā)手冊(cè),上面有線程池的一個(gè)建議:
【強(qiáng)制】線程池不允許使用 Executors 去創(chuàng)建,而是通過 ThreadPoolExecutor 的方式,
這樣的處理方式讓寫的同學(xué)更加明確線程池的運(yùn)行規(guī)則,規(guī)避資源耗盡的風(fēng)險(xiǎn)。
結(jié)合最近面試的經(jīng)歷,發(fā)現(xiàn)這條建議還是十分有用的,因?yàn)樽约航?jīng)常使用Executors提供的工廠方法創(chuàng)建線程池,所以忽略了線程池內(nèi)部的實(shí)現(xiàn)。
特別是拒絕策略,面試被問到兩次,因?yàn)槭褂肊xecutors創(chuàng)建線程池不會(huì)傳入這個(gè)參數(shù)而使用默認(rèn)值所以我們常常忽略這一參數(shù),還好因?yàn)檫@條建議,自己提前熟悉了一下ThreadPoolExecutor。
ThreadPoolExecutor
先看看如何使用ThreadPoolExecutor創(chuàng)建線程池:
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnabl