網(wǎng)站線框圖怎樣做萬網(wǎng)官網(wǎng)
參考:Java 線程池最佳實(shí)踐 | JavaGuide
-
使用構(gòu)造函數(shù)創(chuàng)建線程池?!?strong>使用有界隊(duì)列,控制線程創(chuàng)建數(shù)量】
-
SpringBoot 中的 Actuator 組件 /
ThreadPoolExecutor
的相關(guān) API監(jiān)控線程池運(yùn)行狀態(tài) -
是不同的業(yè)務(wù)使用不同的線程池【父子任務(wù)用同一個(gè)線程池容易死鎖】,重心優(yōu)化系統(tǒng)性能瓶頸相關(guān)的業(yè)務(wù)
-
初始化線程池的時(shí)候需要顯示命名(設(shè)置線程池名稱前綴,有業(yè)務(wù)含義)【 guava 的
ThreadFactoryBuilder
/ 自己實(shí)現(xiàn)ThreadFactory
】 -
正確配置線程池參數(shù)。(線程數(shù)太大,增加上下文切換消耗)?!久缊F(tuán)的線程池參數(shù)動(dòng)態(tài)配置】
-
顯式地關(guān)閉線程池,釋放線程資源。awaitTermination同步等待【需要設(shè)置超時(shí)時(shí)間,以及捕捉異常,避免程序崩潰或者無法正常退出?!俊howdown / showdownNow異步。
-
避免將耗時(shí)任務(wù)提交到線程池中執(zhí)行(會(huì)頻繁創(chuàng)建線程)?!救缇W(wǎng)絡(luò)請(qǐng)求、文件讀寫等,可以采用異步操作的方式來處理】
-
線程池是可以復(fù)用的,一定不要頻繁創(chuàng)建線程池
-
使用 Spring 內(nèi)部線程池ThreadPoolTaskExecutor 時(shí),一定要手動(dòng)自定義線程池,配置合理的參數(shù),不然會(huì)出現(xiàn)生產(chǎn)問題(一個(gè)請(qǐng)求創(chuàng)建一個(gè)線程)
-
線程池和
ThreadLocal
共用,可能會(huì)導(dǎo)致線程從ThreadLocal
獲取到的是舊值/臟數(shù)據(jù)。【阿里巴巴開源的TransmittableThreadLocal
(TTL
)---提供ThreadLocal
值的傳遞功能,解決異步執(zhí)行時(shí)上下文傳遞的問題】