????在系統(tǒng)面臨高負(fù)載的情況下北救,F(xiàn)ixedThreadPool和CachedThreadPool都存在著自身的弊端,F(xiàn)ixedThreadPool的LinkedBlockingQueue是無(wú)界隊(duì)列芜抒,這就有可能造成內(nèi)存溢出或者高延遲珍策。如果運(yùn)行耗時(shí)任務(wù)的情況下笼吟,CachedThreadPool會(huì)導(dǎo)致線程創(chuàng)建不可控票堵。
? ? 所以在選擇ThreadPoolExecutor參數(shù)時(shí)候,應(yīng)該考慮一下因素:
? ? 1:選擇有界隊(duì)列并選擇正確的RejectionHandler划煮;
? ? 2:利用beforeExecute(Thread, Runnable)和afterExecute(Runnable, Throwable)在任務(wù)提交之前和運(yùn)行之后對(duì)線程池做些監(jiān)控拐迁;
? ? 3:動(dòng)態(tài)的修改線程池的大胁渑;例如使用setCorePoolSize(intcorePoolSize)线召;