最簡單的方法是用@Bean將初始化的ThreadPoolExecutor直接註入springboot。這是壹個singleton,但是它變成了壹個公共線程池,用完了就不能關閉()。它會壹直存在於應用程序中,占用壹點內存。當然springboot也自帶了可以直接調用的線程池,但是因為是公共的,配置不能根據不同的服務靈活更改,所以需要的時候還是自己寫壹個比較好。
如果不熟悉singleton模式,可以看下面兩篇博文,非常詳細。壹般的實現方法包括饑餓型、懶惰型、雙檢測和靜態內部類方法來實現單壹情況。我認為靜態的內部類方法是最合適的。
單例模式參考博客鏈接:blogs.com/jingpeipei/p/5771716.html
blogs.com/damsoft/p/6105122.html
讓我們用靜態內部類的方法創建壹個singleton來管理ThreadPoolExecutor的創建:
業務測試方法:
註意,這個自己創建的線程池在用完之後要及時關閉。考慮到並發性,在線程池存在且未關閉的情況下,可以同時處理其他並發調用。當它在關機後被調用時,將會重新生成壹個新的線程池來繼續接收處理請求。這就兼顧了內存占用和性能。在測試過程中,第壹個請求的大小分配為1000,第二個請求的大小分配為1。處理大小為1的請求,關閉線程池時,第壹個請求還沒有處理完,會創建剩余的請求繼續處理剩余的請求,處理完後關閉線程池,這樣可以在不同的業務場景下創建不同的配置,更加靈活。