日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

spring boot 異步async

作者:郭俊強(qiáng) 更新時(shí)間: 2023-07-16 編程語(yǔ)言
#### 步驟1:配置線程池
```
@Configuration
@EnableAsync
public class SyncConfiguration {
    @Bean("setOrderInfo")
    public ThreadPoolTaskExecutor getScorePoolTaskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        //核心線程數(shù)
        taskExecutor.setCorePoolSize(10);
        //線程池維護(hù)線程的最大數(shù)量,只有在緩沖隊(duì)列滿(mǎn)了之后才會(huì)申請(qǐng)超過(guò)核心線程數(shù)的線程
        taskExecutor.setMaxPoolSize(100);
        //緩存隊(duì)列
        taskExecutor.setQueueCapacity(50);
        //許的空閑時(shí)間,當(dāng)超過(guò)了核心線程出之外的線程在空閑時(shí)間到達(dá)之后會(huì)被銷(xiāo)毀
        taskExecutor.setKeepAliveSeconds(200);
        //異步方法內(nèi)部線程名稱(chēng)
        taskExecutor.setThreadNamePrefix("score-");
        /**
         * 當(dāng)線程池的任務(wù)緩存隊(duì)列已滿(mǎn)并且線程池中的線程數(shù)目達(dá)到maximumPoolSize,如果還有任務(wù)到來(lái)就會(huì)采取任務(wù)拒絕策略
         * 通常有以下四種策略:
         * ThreadPoolExecutor.AbortPolicy:丟棄任務(wù)并拋出RejectedExecutionException異常。
         * ThreadPoolExecutor.DiscardPolicy:也是丟棄任務(wù),但是不拋出異常。
         * ThreadPoolExecutor.DiscardOldestPolicy:丟棄隊(duì)列最前面的任務(wù),然后重新嘗試執(zhí)行任務(wù)(重復(fù)此過(guò)程)
         * ThreadPoolExecutor.CallerRunsPolicy:重試添加當(dāng)前的任務(wù),自動(dòng)重復(fù)調(diào)用 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";
    }

}

異步寫(xiě)法很簡(jiǎn)單 :

? ? ? ? 1、線程池設(shè)置

? ? ? ? 2、阻塞線程的方法上加@Async(指定線程名)

? ? ? ? 3、調(diào)用阻塞線程的方法即可
? ? ? ?

1.注解的方法必須是public方法。
2.方法一定要從另一個(gè)類(lèi)中調(diào)用,也就是從類(lèi)的外部調(diào)用,類(lèi)的內(nèi)部調(diào)用是無(wú)效的。

原文鏈接:https://blog.csdn.net/qq_37061571/article/details/122016478

  • 上一篇:沒(méi)有了
  • 下一篇:沒(méi)有了
欄目分類(lèi)
最近更新