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)文章
Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(條件隊(duì)列)
這篇文章主要為大家詳細(xì)介紹了Java并發(fā)系列之AbstractQueuedSynchronizer源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
SpringMVC請(qǐng)求路徑問(wèn)題及解決(路徑前面加不加/的問(wèn)題)
文章講解了Web開(kāi)發(fā)中請(qǐng)求路徑的構(gòu)成和絕對(duì)路徑、相對(duì)路徑的區(qū)別,重點(diǎn)分析了相對(duì)路徑是否帶斜杠(/)對(duì)資源定位的影響,并結(jié)合前后臺(tái)路徑解析進(jìn)行說(shuō)明,最后建議按規(guī)范使用帶斜杠的路徑2025-10-10
使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置操作
這篇文章主要介紹了使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java IO文件過(guò)濾器對(duì)命令設(shè)計(jì)模式的使用
java io流里面使用到了很多的設(shè)計(jì)模式,最典型的就是裝飾模式,還有命令模式,下面分兩部分來(lái)講Java IO文件過(guò)濾器對(duì)命令設(shè)計(jì)模式的使用,一起看看吧2017-06-06
java中BigDecimal里面的subtract函數(shù)介紹及實(shí)現(xiàn)方法
在Java中實(shí)現(xiàn)減法操作需要根據(jù)數(shù)據(jù)類型選擇不同方法,主要分為數(shù)值型減法和字符串減法兩種場(chǎng)景,本文給大家介紹java中BigDecimal里面的subtract函數(shù)及實(shí)現(xiàn)方法,感興趣的朋友一起看看吧2025-06-06

