SpringBoot2線程池定義使用方法解析
更新時間:2020年03月26日 09:10:47 作者:趙小胖0914
這篇文章主要介紹了SpringBoot2線程池定義使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
我們都知道spring只是為我們簡單的處理線程池,每次用到線程總會new 一個新的線程,效率不高,所以我們需要自定義一個線程池。
定義線程池
@Slf4j
@EnableAsync
@Configuration
public class AsyncExecutorConfig implements AsyncConfigurer {
@Bean
public ThreadPoolTaskExecutor asyncServiceExecutor() {
//返回可用處理器的虛擬機(jī)的最大數(shù)量不小于1
int cpu = Runtime.getRuntime().availableProcessors();
log.info("start asyncServiceExecutor cpu : {}", cpu);
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心線程數(shù)
executor.setCorePoolSize(cpu);
//配置最大線程數(shù)
executor.setMaxPoolSize(cpu);
//配置隊列大小
executor.setQueueCapacity(50);
//用來設(shè)置線程池關(guān)閉的時候等待所有任務(wù)都完成再繼續(xù)銷毀其他的Bean
executor.setWaitForTasksToCompleteOnShutdown(true);
//設(shè)置線程池中任務(wù)的等待時間,如果超過這個時候還沒有銷毀就強(qiáng)制銷毀,以確保應(yīng)用最后能夠被關(guān)閉,而不是阻塞住
executor.setAwaitTerminationSeconds(60);
//配置線程池中的線程的名稱前綴
executor.setThreadNamePrefix("async-service-");
// rejection-policy:當(dāng)pool已經(jīng)達(dá)到max size的時候,如何處理新任務(wù)
// CALLER_RUNS:不在新線程中執(zhí)行任務(wù),而是有調(diào)用者所在的線程來執(zhí)行
// 使用預(yù)定義的異常處理類
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//執(zhí)行初始化
executor.initialize();
return executor;
}
@Override
public Executor getAsyncExecutor() {
return asyncServiceExecutor();
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return (throwable, method, objects) -> {
StringBuilder sb = new StringBuilder();
for (Object param : objects) {
sb.append(param).append(",");
}
log.error("Exception message - {},Method name - {},Parameter value - {}", throwable.getMessage(), method.getName(), sb.toString());
};
}
}
如何使用
@Autowired
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
public void test(){
CompletableFuture<Void> userFuture = CompletableFuture.runAsync(() -> System.out.println(111), threadPoolTaskExecutor);
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Springboot應(yīng)用中線程池配置詳細(xì)教程(最新2021版)
- springboot使用線程池(ThreadPoolTaskExecutor)示例
- SpringBoot?項目中創(chuàng)建線程池
- Springboot線程池并發(fā)處理數(shù)據(jù)優(yōu)化方式
- SpringBoot+slf4j線程池全鏈路調(diào)用日志跟蹤問題及解決思路(二)
- SpringBoot異步使用@Async的原理以及線程池配置詳解
- Springboot 如何使用@Async整合線程池
- springboot線程池監(jiān)控的簡單實現(xiàn)
- springboot為異步任務(wù)規(guī)劃自定義線程池的實現(xiàn)
- SpringBoot實現(xiàn)線程池
- Springboot自帶線程池的實現(xiàn)
相關(guān)文章
Mybatis?在?insert?插入操作后返回主鍵?id的操作方法
這篇文章主要介紹了Mybatis?在?insert?插入操作后返回主鍵?id的操作方法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
使用Java將字符串在ISO-8859-1和UTF-8之間相互轉(zhuǎn)換
大家都知道在一些情況下,我們需要特殊的編碼格式,如:UTF-8,但是系統(tǒng)默認(rèn)的編碼為ISO-8859-1,遇到這個問題,該如何對字符串進(jìn)行兩個編碼的轉(zhuǎn)換呢,下面小編給大家分享下java中如何在ISO-8859-1和UTF-8之間相互轉(zhuǎn)換,感興趣的朋友一起看看吧2021-12-12
springboot多模塊項目mvn打包遇到存在依賴但卻無法發(fā)現(xiàn)符號問題
在SpringBoot多模塊項目中,如果遇到依賴存在但無法發(fā)現(xiàn)符號的問題,常見原因可能是pom.xml配置問題,例如,如果某個模塊僅作為依賴而不是啟動工程,不應(yīng)在其pom中配置spring-boot-maven-plugin插件,因為這將影響jar包的生成方式2024-09-09
spring-data-jpa實現(xiàn)增刪改查以及分頁操作方法
下面小編就為大家分享一篇spring-data-jpa實現(xiàn)增刪改查以及分頁操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
解決Java中的強(qiáng)制類型轉(zhuǎn)換和二進(jìn)制表示問題
這篇文章主要介紹了解決Java中的強(qiáng)制類型轉(zhuǎn)換和二進(jìn)制表示問題,需要的朋友可以參考下2019-05-05
新手入門學(xué)習(xí)Spring Freemarker教程解析
這篇文章主要介紹了新手入門學(xué)習(xí)Freemarker教程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10

