国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - Java教程 - spring boot中使用@Async實現(xiàn)異步調(diào)用任務(wù)

spring boot中使用@Async實現(xiàn)異步調(diào)用任務(wù)

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

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

什么是“異步調(diào)用”?

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

 同步調(diào)用

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

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

?
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個任務(wù)
 * @author Angel(QQ:412887952)
 * @version v.0.1
 */
@Component
publicclass Task1 {
  //定義一個隨機對象.
  publicstatic Random random =new Random();
 
  //任務(wù)一;
  publicvoid doTaskOne() throws Exception {
    System.out.println("開始做任務(wù)一");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務(wù)一,耗時:" + (end - start) + "毫秒");
  }
 
  //任務(wù)二;
  publicvoid doTaskTwo() throws Exception {
    System.out.println("開始做任務(wù)二");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務(wù)二,耗時:" + (end - start) + "毫秒");
  }
 
  //任務(wù)3;
  publicvoid doTaskThree() throws Exception {
    System.out.println("開始做任務(wù)三");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務(wù)三,耗時:" + (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";
  }

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

開始做任務(wù)一

完成任務(wù)一,耗時:4156毫秒

開始做任務(wù)二

完成任務(wù)二,耗時:557毫秒

開始做任務(wù)三

完成任務(wù)三,耗時:6171毫秒

 異步調(diào)用

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

在Spring Boot中,我們只需要通過使用@Async注解就能簡單的將原來的同步函數(shù)變?yōu)楫惒胶瘮?shù),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個任務(wù)
 * @author Angel(QQ:412887952)
 * @version v.0.1
 */
@Component
publicclass Task2 {
  //定義一個隨機對象.
  publicstatic Random random =new Random();
 
  //任務(wù)一;
  @Async
  publicvoid doTaskOne() throws Exception {
    System.out.println("開始做任務(wù)一");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務(wù)一,耗時:" + (end - start) + "毫秒");
  }
 
  //任務(wù)二;
  @Async
  publicvoid doTaskTwo() throws Exception {
    System.out.println("開始做任務(wù)二");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務(wù)二,耗時:" + (end - start) + "毫秒");
  }
 
  //任務(wù)3;
  @Async
  publicvoid doTaskThree() throws Exception {
    System.out.println("開始做任務(wù)三");
    longstart = System.currentTimeMillis();
    Thread.sleep(random.nextInt(10000));
    longend = System.currentTimeMillis();
    System.out.println("完成任務(wù)三,耗時:" + (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";
  }

此時可以反復(fù)執(zhí)行單元測試,您可能會遇到各種不同的結(jié)果,比如:

開始做任務(wù)一

開始做任務(wù)二

開始做任務(wù)三

完成任務(wù)三,耗時:57毫秒

完成任務(wù)二,耗時:3621毫秒

完成任務(wù)一,耗時:7419毫秒

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎影视免费看电影 | 免费一级黄色毛片 | av中文字幕在线播放 | a天堂在线| 久久久久久久久久久精 | 欧美一级片在线 | 欧美一级片毛片免费观看视频 | 精品专区 | 亚洲激情在线 | 亚洲视频在线观看网址 | 欧洲一区二区在线观看 | 亚洲综合日韩欧美 | 奇米一区二区三区 | 国产99久久精品一区二区永久免费 | 久久久www | 欧美第一页 | 欧美不卡一区二区三区 | 久久久亚洲精品一区二区三区 | 午夜资源| 中文字幕国产在线视频 | 亚洲一区 日韩精品 中文字幕 | 精品久久久久久国产 | 国产精品视频入口 | 免费在线观看黄色 | 国产高清视频在线观看 | 国产三级在线 | 羞羞视频免费观看网站 | 亚洲国产精品电影在线观看 | 91亚洲日本aⅴ精品一区二区 | 欧美成人影院 | 中文字幕免费视频 | 久久久久在线 | 不卡黄色| 成人免费在线观看 | 午夜999| 欧美在线观看免费观看视频 | 国产一区中文字幕 | 成人免费视频视频在线观看 免费 | 国产精品色哟哟哟 | 一级全黄少妇性色生活片免费 | 国产精品天天干 |