網站首頁 編程語言 正文
#### 步驟1:配置線程池
```
@Configuration
@EnableAsync
public class SyncConfiguration {
@Bean("setOrderInfo")
public ThreadPoolTaskExecutor getScorePoolTaskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
//核心線程數
taskExecutor.setCorePoolSize(10);
//線程池維護線程的最大數量,只有在緩沖隊列滿了之后才會申請超過核心線程數的線程
taskExecutor.setMaxPoolSize(100);
//緩存隊列
taskExecutor.setQueueCapacity(50);
//許的空閑時間,當超過了核心線程出之外的線程在空閑時間到達之后會被銷毀
taskExecutor.setKeepAliveSeconds(200);
//異步方法內部線程名稱
taskExecutor.setThreadNamePrefix("score-");
/**
* 當線程池的任務緩存隊列已滿并且線程池中的線程數目達到maximumPoolSize,如果還有任務到來就會采取任務拒絕策略
* 通常有以下四種策略:
* ThreadPoolExecutor.AbortPolicy:丟棄任務并拋出RejectedExecutionException異常。
* ThreadPoolExecutor.DiscardPolicy:也是丟棄任務,但是不拋出異常。
* ThreadPoolExecutor.DiscardOldestPolicy:丟棄隊列最前面的任務,然后重新嘗試執行任務(重復此過程)
* ThreadPoolExecutor.CallerRunsPolicy:重試添加當前的任務,自動重復調用 execute() 方法,直到成功
*/
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
taskExecutor.initialize();
return taskExecutor;
}
}
#### 步驟2: 為@Async指定線程池名字
@Slf4j
@Service
public class Services {
@Async("setOrderInfo") //線程池中bean的name值
public void setOrderInfoMsg(){
try {
Thread.sleep(5000);
log.info("處理訂單");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@RestController
@Slf4j
public class Controll {
@Autowired
private Services services;
@RequestMapping("/hello")
public String getInfo(){
this.services.setOrderInfoMsg();
return "hello";
}
}
異步寫法很簡單 :
? ? ? ? 1、線程池設置
? ? ? ? 2、阻塞線程的方法上加@Async(指定線程名)
? ? ? ? 3、調用阻塞線程的方法即可
? ? ? ?1.注解的方法必須是public方法。
2.方法一定要從另一個類中調用,也就是從類的外部調用,類的內部調用是無效的。
原文鏈接:https://blog.csdn.net/qq_37061571/article/details/122016478
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-06-01 基于Android實現可滾動的環形菜單效果_Android
- 2022-09-09 Python中Timedelta轉換為Int或Float方式_python
- 2022-02-02 appname is automatically signed for development,
- 2022-11-25 mysate中stat命令的實現方法_C 語言
- 2022-12-14 Jetpack?Compose重寫TopAppBar實現標題多行折疊詳解_Android
- 2022-07-02 SpringBoot-?@SessionAttributes--使用/實例
- 2022-05-10 一起來學習C++中remove與erase的理解_C 語言
- 2022-12-15 conda創建環境過程出現"Solving?environment:?failed"報錯的詳細解決方
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支