當前位置:編程學習大全網 - 源碼下載 - 靜態內部類方法,用於構建單例模式以創建ThreadPoolExecutor線程池

靜態內部類方法,用於構建單例模式以創建ThreadPoolExecutor線程池

之前寫過壹篇關於java線程池ThreadPoolExecutor使用無界隊列LinkedBlockingQueue實現多線程的文章,簡單記錄了ThreadPoolExecutor使用無界隊列LinkedBlockingQueue實現多線程的用法。但在實際應用中,在壹些大並發的請求場景下,會直接同時創建多個線程池,存在內存不足的風險。因此,可以考慮使用singleton模式來管理線程池的調用。

最簡單的方法是用@Bean將初始化的ThreadPoolExecutor直接註入springboot。這是壹個singleton,但是它變成了壹個公共線程池,用完了就不能關閉()。它會壹直存在於應用程序中,占用壹點內存。當然springboot也自帶了可以直接調用的線程池,但是因為是公共的,配置不能根據不同的服務靈活更改,所以需要的時候還是自己寫壹個比較好。

如果不熟悉singleton模式,可以看下面兩篇博文,非常詳細。壹般的實現方法包括饑餓型、懶惰型、雙檢測和靜態內部類方法來實現單壹情況。我認為靜態的內部類方法是最合適的。

單例模式參考博客鏈接:blogs.com/jingpeipei/p/5771716.html

blogs.com/damsoft/p/6105122.html

讓我們用靜態內部類的方法創建壹個singleton來管理ThreadPoolExecutor的創建:

業務測試方法:

註意,這個自己創建的線程池在用完之後要及時關閉。考慮到並發性,在線程池存在且未關閉的情況下,可以同時處理其他並發調用。當它在關機後被調用時,將會重新生成壹個新的線程池來繼續接收處理請求。這就兼顧了內存占用和性能。在測試過程中,第壹個請求的大小分配為1000,第二個請求的大小分配為1。處理大小為1的請求,關閉線程池時,第壹個請求還沒有處理完,會創建剩余的請求繼續處理剩余的請求,處理完後關閉線程池,這樣可以在不同的業務場景下創建不同的配置,更加靈活。

  • 上一篇:大頂源代碼
  • 下一篇:網絡安全技術與應用的相關雜誌
  • copyright 2024編程學習大全網