在springboot中如何使用@Async實(shí)現(xiàn)異步調(diào)用

在spring boot中如何使用@Async實(shí)現(xiàn)異步調(diào)用?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

在興和等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都營(yíng)銷網(wǎng)站建設(shè),外貿(mào)營(yíng)銷網(wǎng)站建設(shè),興和網(wǎng)站建設(shè)費(fèi)用合理。

什么是”異步調(diào)用”與”同步調(diào)用”

“同步調(diào)用”就是程序按照一定的順序依次執(zhí)行,,每一行程序代碼必須等上一行代碼執(zhí)行完畢才能執(zhí)行;”異步調(diào)用”則是只要上一行代碼執(zhí)行,無(wú)需等待結(jié)果的返回就開(kāi)始執(zhí)行本身任務(wù)。
通常情況下,”同步調(diào)用”執(zhí)行程序所花費(fèi)的時(shí)間比較多,執(zhí)行效率比較差。所以,在代碼本身不存在依賴關(guān)系的話,我們可以考慮通過(guò)”異步調(diào)用”的方式來(lái)并發(fā)執(zhí)行。

“異步調(diào)用”

在 spring boot 框架中,只要提過(guò)@Async注解就能獎(jiǎng)普通的同步任務(wù)改為異步調(diào)用任務(wù)。
注意: @Async所修飾的函數(shù)不要定義為static類型,這樣異步調(diào)用不會(huì)生效

1. 開(kāi)啟@Async注解

在Spring Boot主類添加@EnableAsync注解

2. 定義異步任務(wù)

定義Task類,創(chuàng)建三個(gè)處理函數(shù)分別模擬三個(gè)執(zhí)行任務(wù)的操作,操作消耗時(shí)間隨機(jī)?。?0秒內(nèi))。

@Component
public class Task {

  //定義一個(gè)隨機(jī)對(duì)象.
  public static Random random =new Random();

  @Async //加入"異步調(diào)用"注解
  public void doTaskOne() throws InterruptedException {
    System.out.println("開(kāi)始執(zhí)行任務(wù)一");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任務(wù)一,耗時(shí):" + (end - start) + "毫秒");
  }

  @Async
  public void doTaskTwo() throws InterruptedException {
    System.out.println("開(kāi)始執(zhí)行任務(wù)二");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任務(wù)二,耗時(shí):" + (end - start) + "毫秒");
  }

  @Async
  public void doTaaskThree() throws InterruptedException {
    System.out.println("開(kāi)始執(zhí)行任務(wù)三");
    long start = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    long end = System.currentTimeMillis();
    System.out.println("完成任務(wù)三,耗時(shí):" + (end - start) + "毫秒");
  }
}

3. 創(chuàng)建Controller進(jìn)行測(cè)試

注意@Autowired注入類,因?yàn)檫@個(gè)類已經(jīng)被 Spring 管理了。如果使用 new 來(lái)獲得線程類將不會(huì)執(zhí)行異步效果,這里涉及到在 Spring 中使用多線程。

@Controller
public class TaskController {

  @Autowired
  private Task TASK;

  @ResponseBody
  @RequestMapping("/task")
  public String task() throws Exception {
    System.out.println("開(kāi)始執(zhí)行Controller任務(wù)");
    long start = System.currentTimeMillis();
    TASK.doTaskOne();
    TASK.doTaskTwo();
    TASK.doTaaskThree();
    long end = System.currentTimeMillis();
    System.out.println("完成Controller任務(wù),耗時(shí):" + (end - start) + "毫秒");
    return "success";
  }
}

4. 多次調(diào)用

訪問(wèn) http://localhost:8080/task 截圖:

在spring boot中如何使用@Async實(shí)現(xiàn)異步調(diào)用

看完上述內(nèi)容,你們掌握在spring boot中如何使用@Async實(shí)現(xiàn)異步調(diào)用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文名稱:在springboot中如何使用@Async實(shí)現(xiàn)異步調(diào)用
網(wǎng)頁(yè)路徑:http://muchs.cn/article40/ihjcho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站商城網(wǎng)站、定制開(kāi)發(fā)、微信公眾號(hào)服務(wù)器托管、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)