SpringBoot項(xiàng)目@Async方法問(wèn)題解決方案
現(xiàn)象:
1. 表面現(xiàn)象: 方法中輸出的日志, 日志文件中找不到, 也沒(méi)有任何報(bào)錯(cuò)(即@Async標(biāo)注的方法沒(méi)有執(zhí)行, 也沒(méi)有報(bào)錯(cuò))
2. 分析現(xiàn)象: 日志中某個(gè)時(shí)刻之后沒(méi)有了task-xxx線(xiàn)程的日志
原因:
@Async異常方法默認(rèn)使用Spring創(chuàng)建ThreadPoolTaskExecutor(參考TaskExecutionAutoConfiguration),
其中默認(rèn)核心線(xiàn)程數(shù)為8, 默認(rèn)最大隊(duì)列和默認(rèn)最大線(xiàn)程數(shù)都是Integer.MAX_VALUE. 創(chuàng)建新線(xiàn)程的條件是隊(duì)列填滿(mǎn)時(shí), 而這樣的配置隊(duì)列永遠(yuǎn)不會(huì)填滿(mǎn), 如果有@Async注解標(biāo)注的方法長(zhǎng)期占用線(xiàn)程(比如HTTP長(zhǎng)連接等待獲取結(jié)果), 在核心8個(gè)線(xiàn)程數(shù)占用滿(mǎn)了之后, 新的調(diào)用就會(huì)進(jìn)入隊(duì)列, 外部表現(xiàn)為沒(méi)有執(zhí)行.
解決:
手動(dòng)配置相應(yīng)屬性即可. 比如
spring.task.execution.pool.queueCapacity=4
spring.task.execution.pool.coreSize=20
備注:
此處沒(méi)有配置maxSize, 仍是默認(rèn)的Integer.MAX_VALUE. 如果配置的話(huà), 請(qǐng)考慮達(dá)到最大線(xiàn)程數(shù)時(shí)的處理策略(JUC包查找RejectedExecutionHandler的實(shí)現(xiàn)類(lèi))
(默認(rèn)為拒絕執(zhí)行AbortPolicy, 即拋出異常)
AbortPolicy: 直接拋出java.util.concurrent.RejectedExecutionException異常
CallerRunsPolicy: 主線(xiàn)程直接執(zhí)行該任務(wù),執(zhí)行完之后嘗試添加下一個(gè)任務(wù)到線(xiàn)程池中,可以有效降低向線(xiàn)程池內(nèi)添加任務(wù)的速度
DiscardOldestPolicy: 拋棄舊的任務(wù)
DiscardPolicy: 拋棄當(dāng)前任務(wù)
截圖:
1. ThreadPoolTaskExecutor

2. SpringMonitor的配置屬性

3. SpringMonitor的Threads

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中多線(xiàn)程同步類(lèi) CountDownLatch
本篇文章主要介紹了Java中多線(xiàn)程同步類(lèi) CountDownLatch的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05
druid?handleException執(zhí)行流程源碼解析
這篇文章主要為大家介紹了druid?handleException執(zhí)行流程源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
java實(shí)現(xiàn)HmacSHA256算法進(jìn)行加密方式
這篇文章主要介紹了java實(shí)現(xiàn)HmacSHA256算法進(jìn)行加密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
使用mybatisPlus生成oracle自增序列遇到的坑及解決
這篇文章主要介紹了使用mybatisPlus生成oracle自增序列遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
java Nio使用NioSocket客戶(hù)端與服務(wù)端交互實(shí)現(xiàn)方式
這篇文章主要介紹了java Nio使用 NioSocket 客戶(hù)端與服務(wù)端交互實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

