Spring / Spring boot 基於註解異步編程@Async

緊接上一篇文章,有大神評論說基於WebSyncTask的異步任務處理和基於註解@Async的異步任務處理之間有什麼區別,其實大神評論的時候我也不清楚到底啥區別,因此就去學了一波!藉此機會,總結以下:linux

1、Spring中註解異步任務開發步驟

  • 一、在配置類上增長@@EnableAsync註解,並保證Spring可以掃描獲得該註解
  • 二、異步任務定義,採用@Async定義
  • 三、最後跟調用普通方法同樣調用異步任務便可,對於有返回結果的異步任務值獲取,可經過FutureResult獲取

對於基於註解的異步任務編程示例代碼,小編已經將代碼合併到上篇博客的代碼中:nginx

代碼地址爲:github.com/SmallerCode…git

哈哈,給小編個start嘛!github

2、異步任務基本原理

異步的概念小編以前也有說起過,很簡單的道理就是我找你辦事,我不用等你把事情辦完,我又能夠脫身去作別的事情了,舉個例子就是當你發微信給你朋友,說成留言可能會更準確,等你朋友看到後把事情辦好通知你就能夠了。固然對於web請求響應而言,異步能夠理解爲將當前處理請求的線程釋放掉,後臺偷偷開啓一個線程去執行,執行完成以後再返回,讓處理請求的線程能夠去處理其餘進來的請求。web

nginx之因此併發那麼優秀,我以爲linux的epoll模型能夠了解下。還有,能夠了解下servlet 3.0以後對異步的支持。編程

3、異步任務類型

因爲處理請求的線程已經被釋放掉,所以要求咱們的異步任務線程要和當前請求的上下文進行關聯,才能正常的將數據響應出去。異步任務不永遠都是順利的,可能有以下三種狀況:微信

  • 一、它可能執行正常且沒有返回值,void聲明
  • 二、它可能會返回某個結果
  • 三、它可能拋出異常信息,此時須要咱們對異常進行處理

對於獲取返回值處理併發

採用ResultFuture便可返回一個Future對象,經過Future對象的get方法便可獲得返回值。異步

對於異常信息處理線程

基於註解的異步任務異常處理和基於WebAsynctask不一樣,前者採用AsyncConfigurer結合自定義異常類AsyncUncaughtExceptionHandler的實現類進行處理。

謝謝閱讀,全部上面講到的代碼實現,均可以在上面的github地址看到,若有錯誤,歡迎pr,若是對你有幫助,請給個star,麼麼噠!

相關文章
相關標籤/搜索