最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中使用@Async實(shí)現(xiàn)異步任務(wù)調(diào)用詳解

 更新時(shí)間:2023年12月12日 11:05:34   作者:長(zhǎng)安明月  
這篇文章主要介紹了SpringBoot中使用@Async實(shí)現(xiàn)異步任務(wù)調(diào)用詳解,一個(gè)可以無(wú)需等待被調(diào)用函數(shù)的返回值就讓操作繼續(xù)進(jìn)行的方法(來(lái)自百度百科),即程序在順序執(zhí)行時(shí),不等待異步調(diào)用的語(yǔ)句返回結(jié)果就執(zhí)行后面的程序,需要的朋友可以參考下

一、什么是asynchronous call(異步調(diào)用)

一個(gè)可以無(wú)需等待被調(diào)用函數(shù)的返回值就讓操作繼續(xù)進(jìn)行的方法(來(lái)自百度百科)。

即程序在順序執(zhí)行時(shí),不等待異步調(diào)用的語(yǔ)句返回結(jié)果就執(zhí)行后面的程序。

二、Spring Boot 使用 @Async 注解實(shí)現(xiàn)異步化

我們只需要通過(guò)使用 @Async 注解就能簡(jiǎn)單的將同步函數(shù)變?yōu)楫惒胶瘮?shù),例如新建一個(gè) Asynctask 異步任務(wù)類,源碼如下。

package com.example.asynctask.asynvtask;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
 * @description
 * @date 2019/4/19 11:20
 */
@Component
public class Asynctask {
    // 任務(wù)一
    @Async
    public void doTaskOne() throws Exception {
        System.out.println("開(kāi)始做任務(wù)一");
        long start = System.currentTimeMillis();
        Thread.sleep(3000);
        long end = System.currentTimeMillis();
        System.out.println("完成任務(wù)一,耗時(shí):" + (end - start) + "毫秒");
    }
    // 任務(wù)二
    @Async
    public void doTaskTwo() throws Exception {
        System.out.println("開(kāi)始做任務(wù)二");
        long start = System.currentTimeMillis();
        Thread.sleep(5000);
        long end = System.currentTimeMillis();
        System.out.println("完成任務(wù)二,耗時(shí):" + (end - start) + "毫秒");
    }
    // 任務(wù)3
    @Async
    public void doTaskThree() throws Exception {
        System.out.println("開(kāi)始做任務(wù)三");
        long start = System.currentTimeMillis();
        Thread.sleep(8000);
        long end = System.currentTimeMillis();
        System.out.println("完成任務(wù)三,耗時(shí):" + (end - start) + "毫秒");
    }
}

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

package com.example.asynctask;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@EnableAsync
public class AsynctaskApplication {
	public static void main(String[] args) {
		SpringApplication.run(AsynctaskApplication.class, args);
	}
}

編寫(xiě)測(cè)試類,源碼如下。

package com.example.asynctask.controller;
import com.example.asynctask.asynvtask.Asynctask;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * @description @Async 注解實(shí)現(xiàn)異步任務(wù)
 * @date 2019/4/19 11:20
 */
@RestController
@RequestMapping("/test")
public class AsynctaskController {
    @Resource
    private Asynctask asynctask;
    @RequestMapping("/task")
    public String task2() throws Exception {
        asynctask.doTaskOne();
        asynctask.doTaskTwo();
        asynctask.doTaskThree();
        return "===== test ok =====";
    }
}

測(cè)試結(jié)果:反復(fù)執(zhí)行時(shí),可能出現(xiàn)多種不同的測(cè)試結(jié)果(任務(wù)1、2、3執(zhí)行順序不同),以下是一種情況。

開(kāi)始做任務(wù)三
開(kāi)始做任務(wù)一
開(kāi)始做任務(wù)二
完成任務(wù)一,耗時(shí):2992毫秒
完成任務(wù)二,耗時(shí):4987毫秒
完成任務(wù)三,耗時(shí):7980毫秒

三、注意事項(xiàng)

1、在 @SpringBootApplication 啟動(dòng)類添加注解@EnableAsync;

2、異步方法使用注解 @Async ,返回值為 void 或者 Future;

3、切記一點(diǎn) ,異步方法和調(diào)用方法要分別寫(xiě)在不同的類中,如果寫(xiě)在一個(gè)類中,是沒(méi)有效果的。

到此這篇關(guān)于SpringBoot中使用@Async實(shí)現(xiàn)異步任務(wù)調(diào)用詳解的文章就介紹到這了,更多相關(guān)@Async異步任務(wù)調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于spring?data?jpa?模糊查詢like的坑點(diǎn)

    關(guān)于spring?data?jpa?模糊查詢like的坑點(diǎn)

    這篇文章主要介紹了關(guān)于spring?data?jpa?模糊查詢like的坑點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring中HandlerMethod類源碼詳細(xì)解析

    Spring中HandlerMethod類源碼詳細(xì)解析

    這篇文章主要介紹了Spring中HandlerMethod類源碼詳細(xì)解析,HandlerMethod類用于封裝控制器方法信息,包含類信息、方法Method對(duì)象、參數(shù)、注解等信息,具體的接口請(qǐng)求是可以根據(jù)封裝的信息調(diào)用具體的方法來(lái)執(zhí)行業(yè)務(wù)邏輯,需要的朋友可以參考下
    2023-11-11
  • Java?List一些常用方法完全攻略

    Java?List一些常用方法完全攻略

    List就是一個(gè)線性表,即n個(gè)具有相同類型元素的有限序列,在該序列上可以執(zhí)行增刪改查以及變量等操作,這篇文章主要介紹了Java List一些常用方法的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • 手把手教你idea中創(chuàng)建一個(gè)javaweb(webapp)項(xiàng)目詳細(xì)圖文教程

    手把手教你idea中創(chuàng)建一個(gè)javaweb(webapp)項(xiàng)目詳細(xì)圖文教程

    這篇文章主要介紹了如何使用IntelliJ?IDEA創(chuàng)建一個(gè)Maven項(xiàng)目,并配置Tomcat服務(wù)器進(jìn)行運(yùn)行,過(guò)程包括創(chuàng)建項(xiàng)目、配置運(yùn)行環(huán)境、部署項(xiàng)目以及測(cè)試運(yùn)行,需要的朋友可以參考下
    2025-01-01
  • 淺析Alibaba Nacos注冊(cè)中心源碼剖析

    淺析Alibaba Nacos注冊(cè)中心源碼剖析

    這篇文章主要介紹了淺析Alibaba Nacos注冊(cè)中心源碼剖析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Java中&與&&的區(qū)別及說(shuō)明

    Java中&與&&的區(qū)別及說(shuō)明

    這篇文章主要介紹了Java中&與&&的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot2.x集成Dozer的示例代碼

    SpringBoot2.x集成Dozer的示例代碼

    本文主要介紹了SpringBoot2.x集成Dozer的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • es創(chuàng)建索引和mapping的實(shí)例

    es創(chuàng)建索引和mapping的實(shí)例

    這篇文章主要介紹了es創(chuàng)建索引和mapping的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Mybatis查詢返回Map<String,Object>類型實(shí)例詳解

    Mybatis查詢返回Map<String,Object>類型實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Mybatis查詢返回Map<String,Object>類型的相關(guān)資料,平時(shí)沒(méi)太注意怎么用,今天又遇到了總結(jié)記錄一下,方便以后處理此類問(wèn)題,需要的朋友可以參考下
    2022-07-07
  • 深入理解Thread.sleep(0)的作用

    深入理解Thread.sleep(0)的作用

    本文主要介紹了深入理解Thread.sleep(0)的作用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09

最新評(píng)論

贞丰县| 收藏| 吴桥县| 措美县| 雷波县| 长丰县| 天等县| 榆中县| 若羌县| 甘南县| 平昌县| 呼玛县| 桐柏县| 竹山县| 栾川县| 乐至县| 博罗县| 达州市| 博罗县| 岳阳市| 宽城| 修水县| 桦南县| 图们市| 新建县| 景东| 外汇| 镇雄县| 大埔区| 香港| 武邑县| 西贡区| 木兰县| 石泉县| 丽江市| 莱西市| 彰化县| 西丰县| 高州市| 旅游| 天柱县|