解決定時器同一時刻執行多條任務時阻塞問題

2021-10-10 07:31:29 字數 1088 閱讀 6883

解決定時器同一時刻執行多條任務時阻塞問題

普通的定時任務,會乙個乙個執行,當同一時間有多個定時任務啟動並且含有資料量比較大的任務時,會阻塞其他的定時任務,這樣會產生一系列的問題;

解決辦法:將定時任務放入執行緒池

配置如下:

1、新增全域性@enableasync 註解,開啟對非同步的支援

@enableasync

//開啟對非同步的支援

@component

public

class

sopservicerecoverycontroller

2、新增@async 註解,將該定時任務設定成非同步執行

@async

("executor1"

)@scheduled

(cron =

"0 0/5 * * * ?"

)public

void

test01()

@async

@scheduled

(cron =

"0 0/5 * * * ?"

)public

void

test02()

@async

@scheduled

(cron =

"0 0/5 * * * ?"

)public

void

test03()

①@async(「executor1」)註解可配置進入的執行緒池名稱

②該非同步執行器每次都會開啟乙個子執行緒執行,效能消耗比較大,所以最好是自己配置執行緒池

3、配置執行緒池

使用@enableasync 註解,開啟對非同步的支援

@configuration

@enableasync

//開啟對非同步的支援

public

class

threadpooltaskexecutorconfig

}

特別注意:

沒有配置自己的執行緒池時,會預設使用******asynctaskexecutor。

如何讓多執行緒同一時刻併發執行

使用場景 需要在本機試試自己的介面在某個時間訪問可以被執行的頻率 嚴格意義上來說,不算同一時刻,因為多執行緒執行也是上下文切換的 其實你想找的是某個時間範圍 如一秒內 你的介面呼叫頻率 下單,加購,儲存資料 下面的 可以參考要點第一步 定義執行緒 public class runnabledemo ...

Shiro 同一使用者同一時刻只能在乙個地方登入

思路 首次登陸成功,把sessionid放入redis redistemplate.opsforvalue set token userid,sessionid id為登入賬戶id後面的每次登入成功後,都通過token userid查詢出上一次的sessionid 然後獲取session並刪除。最後...

Spring定時器在同一時間重複執行兩次

最近用spring 的quartz 定時器的時候,發現到時間後,任務總是重複執行兩次,在 tomcat 或jboss 下都如此。列印出他們的 hashcode 發現是不一樣的,也就是說,在 web容器啟動的時候,重複啟了兩個 quartz 執行緒。研究下來發現 quartz 確實會載入兩次 第一次 ...