線程池不允許使用Executors去創(chuàng)建,而是通過ThreadPoolExecutor的方式,這樣的處理方式讓寫的同學更加明確線程池的運行規(guī)則,規(guī)避資源耗盡的風險。 說明:Executors各個方法的弊端:
newFixedThreadPool和newSingleThreadExecutor:主要問題是堆積的請求處理隊列可能會耗費非常大的內(nèi)存,甚至OOM。
newCachedThreadPool和newScheduledThreadPool:主要問題是線程數(shù)最大數(shù)是Integer.MAX_VALUE,可能會創(chuàng)建數(shù)量非常多的線程,甚至OOM。
推薦方式 1 首先引入:commons-lang3包
推薦方式 2 首先引入:com.google.guava包
推薦方式 3spring配置線程池方式:自定義線程工廠bean需要實現(xiàn)ThreadFactory,可參考該接口的其它默認實現(xiàn)類,使用方式直接注入bean調(diào)用execute(Runnable task)方法即可