SpringBoot中的異步任務(wù)解析
默認(rèn)線程池:
使用方式: 開(kāi)啟異步任務(wù),在啟動(dòng)類上使用注解@EnableAsync啟動(dòng)異步任務(wù),在需要異步執(zhí)行的任務(wù)上使用@Async標(biāo)注該方法為異步任務(wù)。
執(zhí)行任務(wù)效果:
自定義線程池:
使用方式: 創(chuàng)建線程池配置類,對(duì)線程池核心線程數(shù)量、最大線程數(shù)量、空閑線程數(shù)量、任務(wù)隊(duì)列以及拒絕策略的設(shè)置,在線程池配置類上使用@Configuration進(jìn)行配置文件裝配,對(duì)需要異步執(zhí)行的任務(wù)上標(biāo)明線程池名稱即可使用指定的線程池執(zhí)行任務(wù),不標(biāo)注則為默認(rèn)線程池執(zhí)行。
//@Configuration public class TheadPoolTaskConfig { // 核心線程數(shù) private static final int corePoolSize = 20; // 最大線程數(shù) private static final int maxPoolSize = 50; // 允許線程空閑時(shí)間 private static final int keepAliveTime = 10; // 緩沖隊(duì)列大小 private static final int queueCopcity = 200; // 線程池前綴 private static final String threadNamePrefix = "Xyamc-Thread-Service-"; @Bean("xyamcTaskExcutor") public ThreadPoolTaskExecutor startTask(){ ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor(); pool.setCorePoolSize(corePoolSize); pool.setMaxPoolSize(maxPoolSize); pool.setQueueCapacity(queueCopcity); pool.setKeepAliveSeconds(keepAliveTime); pool.setThreadNamePrefix(threadNamePrefix); // 線程池拒絕策略 pool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); pool.initialize(); return pool; } }
@RequestMapping(value = "/test1", method = RequestMethod.GET) @ApiOperation(value = "執(zhí)行默認(rèn)線程池異步任務(wù)") public Result<?> test1(HttpServletRequest req, HttpServletResponse response) { iTestService.printSecond(); return Result.ok("同步任務(wù)執(zhí)行成功!"); }
@Override // @Async("xyamcTaskExcutor") public void printSecond() { Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); log.info("異步任務(wù)開(kāi)始執(zhí)行時(shí)間:{}", format.format(date)); try { Thread.sleep(30000); Thread thread = Thread.currentThread(); log.info("當(dāng)前線程名稱:{}", thread.getName()); Date date1 = new Date(); log.info("異步任務(wù)執(zhí)行結(jié)束時(shí)間:{}", format.format(date1)); } catch (InterruptedException e) { throw new RuntimeException(e); } log.info("異步任務(wù)執(zhí)行成功!"); }
線程池拒絕策略
DiscardPolicy 直接丟棄
從上圖可知,線程沒(méi)有做任何處理,直接悄悄的丟棄。
AbortPolicy 直接拒絕策略
從上圖可以看出,線程直接拋出拒絕異常。
DiscardOldestPolicy 棄老策略
從上圖可以看出,線程會(huì)丟棄最開(kāi)始進(jìn)去,然后嘗試重新執(zhí)行。
CallerRunsPolicy
線程池沒(méi)有關(guān)閉,就交給線程本身自己去執(zhí)行。
到此這篇關(guān)于SpringBoot中的異步任務(wù)解析的文章就介紹到這了,更多相關(guān)SpringBoot異步任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringMVC整合websocket實(shí)現(xiàn)消息推送及觸發(fā)功能
這篇文章主要為大家詳細(xì)介紹了SpringMVC整合websocket實(shí)現(xiàn)消息推送及觸發(fā)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-035分鐘讓你快速掌握java8 stream常用開(kāi)發(fā)技巧
這篇文章主要給大家介紹了關(guān)于java8 stream常用開(kāi)發(fā)技巧的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12淺談Spring事務(wù)傳播行為實(shí)戰(zhàn)
這篇文章主要介紹了淺談Spring事務(wù)傳播行為實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Java.lang.ArrayIndexOutOfBoundsException的報(bào)錯(cuò)解決
Java.lang.ArrayIndexOutOfBoundsException是一個(gè)常見(jiàn)的錯(cuò)誤,通常由于訪問(wèn)超出數(shù)組邊界的索引值導(dǎo)致,本文就詳細(xì)的介紹了解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09使用Java橋接模式打破繼承束縛優(yōu)雅實(shí)現(xiàn)多維度變化
這篇文章主要為大家介紹了使用Java橋接模式打破繼承束縛,優(yōu)雅實(shí)現(xiàn)多維度變化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05利用logback filter過(guò)濾某個(gè)類 屏蔽某個(gè)類
這篇文章主要介紹了利用logback filter過(guò)濾某個(gè)類 屏蔽某個(gè)類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07