激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring boot中使用@Async實現異步調用任務

spring boot中使用@Async實現異步調用任務

2020-08-19 11:32林祥纖 Java教程

本篇文章主要介紹了spring boot中使用@Async實現異步調用任務,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

什么是“異步調用”?

“異步調用”對應的是“同步調用”,同步調用指程序按照定義順序依次執行,每一行程序都必須等待上一行程序執行完成之后才能執行;異步調用指程序在順序執行時,不等待異步調用的語句返回結果就執行后面的程序。

 同步調用

下面通過一個簡單示例來直觀的理解什么是同步調用:

定義Task類,創建三個處理函數分別模擬三個執行任務的操作,操作消耗時間隨機取(10秒內)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.kfit.task;
import java.util.Random;
import org.springframework.stereotype.Component;
 
/**
 * 定義3個任務
 * @author Angel(QQ:412887952)
 * @version v.0.1
 */
@Component
publicclass Task1 {
  //定義一個隨機對象.
  publicstatic Random random =new Random();
 
  //任務一;
  publicvoid doTaskOne() throws Exception {
    System.out.println("開始做任務一");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務一,耗時:" + (end - start) + "毫秒");
  }
 
  //任務二;
  publicvoid doTaskTwo() throws Exception {
    System.out.println("開始做任務二");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務二,耗時:" + (end - start) + "毫秒");
  }
 
  //任務3;
  publicvoid doTaskThree() throws Exception {
    System.out.println("開始做任務三");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務三,耗時:" + (end - start) + "毫秒");
  }
 
}

 編寫一個訪問方法:

?
1
2
3
4
5
6
7
8
//測試task1.
  @RequestMapping("/task1")
  public String task1() throws Exception{
    task1.doTaskOne();
    task1.doTaskTwo();
    task1.doTaskThree();
    return"task1";
  }

運行可以看到類似如下輸出:

開始做任務一

完成任務一,耗時:4156毫秒

開始做任務二

完成任務二,耗時:557毫秒

開始做任務三

完成任務三,耗時:6171毫秒

 異步調用

上述的同步調用雖然順利的執行完了三個任務,但是可以看到執行時間比較長,若這三個任務本身之間不存在依賴關系,可以并發執行的話,同步調用在執行效率方面就比較差,可以考慮通過異步調用的方式來并發執行。

在Spring Boot中,我們只需要通過使用@Async注解就能簡單的將原來的同步函數變為異步函數,Task類改在為如下模式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.kfit.task;
import java.util.Random;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
 
/**
 * 定義3個任務
 * @author Angel(QQ:412887952)
 * @version v.0.1
 */
@Component
publicclass Task2 {
  //定義一個隨機對象.
  publicstatic Random random =new Random();
 
  //任務一;
  @Async
  publicvoid doTaskOne() throws Exception {
    System.out.println("開始做任務一");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務一,耗時:" + (end - start) + "毫秒");
  }
 
  //任務二;
  @Async
  publicvoid doTaskTwo() throws Exception {
    System.out.println("開始做任務二");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務二,耗時:" + (end - start) + "毫秒");
  }
 
  //任務3;
  @Async
  publicvoid doTaskThree() throws Exception {
    System.out.println("開始做任務三");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務三,耗時:" + (end - start) + "毫秒");
  }
 
}

為了讓@Async注解能夠生效,還需要在Spring Boot的主程序中配置@EnableAsync,如下所示:

?
1
2
3
4
5
6
7
@SpringBootApplication
@EnableAsync
publicclass App {
 
  //省略其它代碼…
 
}

編寫測試方法:

?
1
2
3
4
5
6
7
8
//測試task2.
  @RequestMapping("/task2")
  public String task2() throws Exception{
    task2.doTaskOne();
    task2.doTaskTwo();
    task2.doTaskThree();
    return"task2";
  }

此時可以反復執行單元測試,您可能會遇到各種不同的結果,比如:

開始做任務一

開始做任務二

開始做任務三

完成任務三,耗時:57毫秒

完成任務二,耗時:3621毫秒

完成任務一,耗時:7419毫秒

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://412887952-qq-com.iteye.com/blog/2309126

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产91九色 | 成人福利免费在线观看 | 激情网站在线观看 | 操碰| 国产1区在线观看 | 91成人久久 | 九九热视频这里只有精品 | 精品一区二区亚洲 | 一级毛片在线看 | av国产片| 成人在线免费视频播放 | 中韩毛片 | 在线成人影视 | 经典三级av在线 | 久久精品99久久久久久2456 | 欧美性色生活片免费播放 | 成人欧美在线观看 | 久久久久久免费免费 | 精品国产91久久久久久久 | 免费观看一级淫片 | 国产精品av久久久久久网址 | 99精品国产一区二区三区 | 叶子楣成人爽a毛片免费啪啪 | 久草手机在线 | 国产免费片 | 亚洲精品无码不卡在线播放he | 黄视频免费观看 | 亚洲成人久久精品 | 欧美精品99 | 在线播放免费视频 | 国产亚洲综合一区二区 | 91在线免费观看 | 亚洲乱妇19p | a一级黄| 欧美一级毛片美99毛片 | 夜夜夜精品视频 | 激情av在线| 在线观看免费精品 | 激情夜色| 日本在线视频免费观看 | 久久精品com |