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