亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring Boot利用@Async如何實現異步調用:自定義線程池

2024-07-14 08:40:33
字體:
來源:轉載
供稿:網友

前言

在之前的Spring Boot基礎教程系列中,已經通過《Spring Boot中使用@Async實現異步調用》一文介紹過如何使用@Async注解來實現異步調用了。但是,對于這些異步執行的控制是我們保障自身應用健康的基本技能。本文我們就來學習一下,如果通過自定義線程池的方式來控制異步調用的并發。

本文中的例子我們可以在之前的例子基礎上修改,也可以創建一個全新的Spring Boot項目來嘗試。

定義線程池

第一步,先在Spring Boot主類中定義一個線程池,比如:

@SpringBootApplicationpublic class Application { public static void main(String[] args) {  SpringApplication.run(Application.class, args); } @EnableAsync @Configuration class TaskPoolConfig {  @Bean("taskExecutor")  public Executor taskExecutor() {   ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();   executor.setCorePoolSize(10);   executor.setMaxPoolSize(20);   executor.setQueueCapacity(200);   executor.setKeepAliveSeconds(60);   executor.setThreadNamePrefix("taskExecutor-");   executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());   return executor;  } }}

上面我們通過使用ThreadPoolTaskExecutor創建了一個線程池,同時設置了以下這些參數:

  • 核心線程數10:線程池創建時候初始化的線程數
  • 最大線程數20:線程池最大的線程數,只有在緩沖隊列滿了之后才會申請超過核心線程數的線程
  • 緩沖隊列200:用來緩沖執行任務的隊列
  • 允許線程的空閑時間60秒:當超過了核心線程出之外的線程在空閑時間到達之后會被銷毀
  • 線程池名的前綴:設置好了之后可以方便我們定位處理任務所在的線程池
  • 線程池對拒絕任務的處理策略:這里采用了CallerRunsPolicy策略,當線程池沒有處理能力的時候,該策略會直接在 execute 方法的調用線程中運行被拒絕的任務;如果執行程序已關閉,則會丟棄該任務

使用線程池

在定義了線程池之后,我們如何讓異步調用的執行任務使用這個線程池中的資源來運行呢?方法非常簡單,我們只需要在@Async注解中指定線程池名即可,比如:

@Slf4j@Componentpublic class Task { public static Random random = new Random(); @Async("taskExecutor") public void doTaskOne() throws Exception {  log.info("開始做任務一");  long start = System.currentTimeMillis();  Thread.sleep(random.nextInt(10000));  long end = System.currentTimeMillis();  log.info("完成任務一,耗時:" + (end - start) + "毫秒"); } @Async("taskExecutor") public void doTaskTwo() throws Exception {  log.info("開始做任務二");  long start = System.currentTimeMillis();  Thread.sleep(random.nextInt(10000));  long end = System.currentTimeMillis();  log.info("完成任務二,耗時:" + (end - start) + "毫秒"); } @Async("taskExecutor") public void doTaskThree() throws Exception {  log.info("開始做任務三");  long start = System.currentTimeMillis();  Thread.sleep(random.nextInt(10000));  long end = System.currentTimeMillis();  log.info("完成任務三,耗時:" + (end - start) + "毫秒"); }}

單元測試

最后,我們來寫個單元測試來驗證一下

@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTestpublic class ApplicationTests { @Autowired private Task task; @Test public void test() throws Exception {  task.doTaskOne();  task.doTaskTwo();  task.doTaskThree();  Thread.currentThread().join(); }}

執行上面的單元測試,我們可以在控制臺中看到所有輸出的線程名前都是之前我們定義的線程池前綴名開始的,說明我們使用線程池來執行異步任務的試驗成功了!

2018-03-27 22:01:15.620  INFO 73703 --- [ taskExecutor-1] com.didispace.async.Task                 : 開始做任務一
2018-03-27 22:01:15.620  INFO 73703 --- [ taskExecutor-2] com.didispace.async.Task                 : 開始做任務二
2018-03-27 22:01:15.620  INFO 73703 --- [ taskExecutor-3] com.didispace.async.Task                 : 開始做任務三
2018-03-27 22:01:18.165  INFO 73703 --- [ taskExecutor-2] com.didispace.async.Task                 : 完成任務二,耗時:2545毫秒
2018-03-27 22:01:22.149  INFO 73703 --- [ taskExecutor-3] com.didispace.async.Task                 : 完成任務三,耗時:6529毫秒
2018-03-27 22:01:23.912  INFO 73703 --- [ taskExecutor-1] com.didispace.async.Task                 : 完成任務一,耗時:8292毫秒

完整示例:

讀者可以根據喜好選擇下面查看Chapter4-1-3項目:

Github:https://github.com/dyc87112/SpringBoot-Learning/

Gitee:https://gitee.com/didispace/SpringBoot-Learning/

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91产国在线观看动作片喷水| 精品亚洲一区二区三区在线播放| 欧美日韩国产一区二区| 2019中文字幕免费视频| 久久手机免费视频| 久久成年人免费电影| 欧美亚洲国产成人精品| 中文字幕国产日韩| 中文字幕欧美国内| 96精品久久久久中文字幕| 中文国产亚洲喷潮| 91中文字幕在线观看| 精品国产老师黑色丝袜高跟鞋| 亚洲高清av在线| 日韩av在线网| 精品久久久91| 91精品中国老女人| 91欧美精品午夜性色福利在线| 国产精品露脸自拍| 国产精品爱啪在线线免费观看| 亚洲精品一区二区网址| 中文字幕国产精品久久| 黑丝美女久久久| 国模精品系列视频| 亚洲视频在线视频| 久热国产精品视频| 一区二区三区国产在线观看| 亚洲成人精品久久久| www.xxxx欧美| 国产欧美一区二区三区在线| 国产成人在线亚洲欧美| 国产精品扒开腿做| 精品国产精品自拍| 91精品啪在线观看麻豆免费| 亚洲福利视频久久| 亚洲欧美精品一区| 国产日韩欧美视频| 97视频在线观看成人| 亚洲天堂第二页| 91精品国产777在线观看| 2019国产精品自在线拍国产不卡| 日韩成人av一区| 亚洲伊人第一页| 欧美做受高潮电影o| 亚洲天堂av在线免费观看| 97精品国产97久久久久久免费| 国产亚洲精品一区二555| 午夜精品久久久久久99热软件| 亚洲美女在线看| 国产成人自拍视频在线观看| 亚洲成色777777女色窝| 国产精品免费看久久久香蕉| 亚洲精品一区av在线播放| 亚洲v日韩v综合v精品v| 一本色道久久88亚洲综合88| 亚洲国产成人精品久久久国产成人一区| 欧美日韩在线观看视频| 国产精品一区二区3区| 亚洲精品视频网上网址在线观看| 欧美在线一区二区三区四| 日韩专区中文字幕| 欧美视频专区一二在线观看| 91网站在线看| 欧美激情精品久久久久久蜜臀| 亚洲欧美在线免费观看| 亚洲精品天天看| 欧美色图在线视频| 久久天天躁狠狠躁夜夜躁2014| 欧美性猛交xxxx富婆| 日韩欧美综合在线视频| 欧美性猛交xxxx乱大交蜜桃| 在线观看精品自拍私拍| 欧美黑人巨大xxx极品| 亚洲女人天堂成人av在线| 成人av在线网址| 欧美裸体男粗大视频在线观看| 欧美一区二区视频97| 国产原创欧美精品| 亚洲精品www| 国产亚洲精品美女| 91免费福利视频| 国产在线一区二区三区| 国产精品视频最多的网站| 91av在线免费观看视频| 国产精品普通话| 欧美精品videos性欧美| www.色综合| 国产精品igao视频| 欧美高清电影在线看| 俺也去精品视频在线观看| 亚洲精品电影在线观看| 青青a在线精品免费观看| 国内精品视频在线| 日韩av免费观影| 久久久这里只有精品视频| 亚洲精品美女在线观看| 日韩视频精品在线| 久久成人免费视频| 日韩一区二区久久久| 国产精品久久久久久久天堂| 久久精品色欧美aⅴ一区二区| 欧美精品www在线观看| 久久成人精品一区二区三区| 国产偷国产偷亚洲清高网站| 欧美精品在线视频观看| 北条麻妃在线一区二区| 欧美高清一级大片| 最新国产精品亚洲| 国产精品视频免费观看www| 国产精品久久久久久av福利| 欧美日韩精品在线观看| 国产精品久久久久久久久久| 国内精品久久久久伊人av| 91精品国产网站| 国产日韩av在线| 九九热r在线视频精品| 精品视频久久久| 日韩在线观看免费网站| 欧美一级电影久久| 97欧美精品一区二区三区| 国模精品视频一区二区三区| 欧美超级乱淫片喷水| 久久国产精品久久国产精品| 欧美成人精品三级在线观看| 亚洲精品国产精品乱码不99按摩| 国产亚洲视频在线| 久久久精品国产一区二区| 日本精品性网站在线观看| 中文一区二区视频| 欧美华人在线视频| 亚洲国产精品久久| 国产精品电影观看| 国产视频在线观看一区二区| 黄网站色欧美视频| 色中色综合影院手机版在线观看| 亚洲а∨天堂久久精品喷水| 91精品久久久久久久久| 国产一区二区色| 91老司机精品视频| 精品成人乱色一区二区| 狠狠综合久久av一区二区小说| 欧美日韩国产精品一区二区三区四区| 川上优av一区二区线观看| 亚洲欧美国产精品久久久久久久| 欧美精品18videos性欧美| 欧美xxxx做受欧美| 91亚洲精品在线| 色妞久久福利网| 国产成人精品亚洲精品| 亚洲国产免费av| 欧美视频在线观看免费网址| 色噜噜国产精品视频一区二区| 国产欧美va欧美va香蕉在线| 国产精品一区二区电影| 欧美亚洲在线播放| 亚洲一区二区黄| 免费99精品国产自在在线| 亚洲成人动漫在线播放| 亚洲人成网站色ww在线| 国产成人精品在线观看| 国产欧美欧洲在线观看| 国产精品丝袜视频| 日韩欧美亚洲范冰冰与中字| 欧美日韩国产综合视频在线观看中文|