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