springboot 多线程_SpringBoot异步调用@Async
一. 什么是異步調用?
異步調用是相對于同步調用而言的,同步調用是指程序按預定順序一步步執行,每一步必須等到上一步執行完后才能執行,異步調用則無需等待上一步程序執行完即可執行。
二. 如何實現異步調用?
多線程,這是很多人第一眼想到的關鍵詞,沒錯,多線程就是一種實現異步調用的方式。在非spring目項目中我們要實現異步調用的就是使用多線程方式,可以自己實現Runable接口或者集成Thread類,或者使用jdk1.5以上提供了的Executors線程池。在spring 3.x之后,就已經內置了@Async來完美解決這個問題,下面將介紹在springboot中如何使用@Async。
三. 舉例說明(無須知道執行結果):
1、pom.xml中導入必要的依賴:
2、寫一個springboot的啟動類:
啟動類里面使用@EnableAsync注解開啟功能,自動掃描
3、建一個service包,然后新建一個UserService類:
要在異步任務的類上寫@Component在定義異步任務類寫@Async(寫在類上代表整個類都是異步,在方法加上代表該類異步執行)
4、建一個controller包,然后新建一個IndexController類,用來獲取請求:
先注掉@EnableAsync和@Async兩個注解,看下同步調用執行的效果。執行結果如下:
####IndexController#### 1####sendSms#### 2####sendSms#### 3####IndexController#### 4對于sendSms方法,我們并不關注它什么時候執行完,所以可以采用異步的方式去執行。放開@EnableAsync和@Async兩個注解,執行結果如下:
####IndexController#### 1####IndexController#### 4####sendSms#### 2####sendSms#### 3總結:使用了@Async的方法,會被當成是一個子線程,所有整個sendSms方法,會在主線程執行完了之后執行
四. 舉例說明(須知道執行結果):
基于上面例子,這里只貼核心代碼
1、啟動類
2、異步類
3、controller類
執行結果如下:
任務6耗時=1000任務4耗時=2000任務5耗時=3000執行總耗時=3012總結:
從上面示例我們可以看出:如果同步方法,那我們需要6秒,而異步執行,我們只需要3秒左右,這就是異步的作用。
1)要把異步任務封裝到類里面,不能直接寫到Controller
2)增加Future 返回結果 AsyncResult("task執行完成");
3)如果需要拿到結果 需要判斷全部的 task.isDone()
總結
以上是生活随笔為你收集整理的springboot 多线程_SpringBoot异步调用@Async的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python我的所得税计算器_教你使用P
- 下一篇: 用python做一个数据查询软件_Pyt