選單

SpringBoot 執行緒池,也太好用了叭!

SpringBoot 執行緒池,也太好用了叭!

前言

前兩天做專案的時候,想提高一下插入表的效能最佳化,因為是兩張表,先插舊的表,緊接著插新的表,一萬多條資料就有點慢了

後面就想到了執行緒池,而用的是Spring Boot專案,可以用Spring提供的對封裝的執行緒池,直接使用註解啟用

使用步驟

先建立一個執行緒池的配置,讓Spring Boot載入,用來定義如何建立一個,要使用和@這兩個註解,表示這是個配置類,並且是執行緒池的配置類

是我配置在,可以參考配置,自由定義

建立一個Service介面,是非同步執行緒的介面

實現類

將Service層的服務非同步化,在方法上增加註解,方法是前面

ExecutorConfig.java

中的方法名,表明方法進入的執行緒池是方法建立的

接下來就是在Controller裡或者是哪裡透過註解注入這個Service

用postmain或者其他工具來多次測試請求一下

透過以上日誌可以發現,是有多個執行緒的,顯然已經在我們配置的執行緒池中執行了,並且每次請求中,controller的起始和結束日誌都是連續列印的,表明每次請求都快速響應了,而耗時的操作都留給執行緒池中的執行緒去非同步執行;

雖然我們已經用上了執行緒池,但是還不清楚執行緒池當時的情況,有多少執行緒在執行,多少在佇列中等待呢?這裡我建立了一個ThreadPoolTaskExecutor的子類,在每次提交執行緒的時候都會將當前執行緒池的執行狀況打印出來

如上所示,showThreadPoolInfo方法中將任務總數、已完成數、活躍執行緒數,佇列大小都打印出來了,然後Override了父類的execute、submit等方法,在裡面呼叫showThreadPoolInfo方法,這樣每次有任務被提交到執行緒池的時候,都會將當前執行緒池的基本情況列印到日誌中;

修改的方法,將改為

再次啟動該工程測試

注意這一行日誌:

這說明提交任務到執行緒池的時候,呼叫的是submit(Callable task)這個方法,當前已經提交了3個任務,完成了3個,當前有0個執行緒在處理任務,還剩0個任務在佇列中等待,執行緒池的基本情況一路瞭然;

最近面試BAT,整理一份面試資料《

Java面試BATJ通關手冊

》,覆蓋了Java核心技術、JVM、Java併發、SSM、微服務、資料庫、資料結構等等。

文章有幫助的話,在看,轉發吧。

謝謝支援喲 (*^__^*)