欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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 {
    // 任務一
    @Async
    public void doTaskOne() throws Exception {
        System.out.println("開始做任務一");
        long start = System.currentTimeMillis();
        Thread.sleep(3000);
        long end = System.currentTimeMillis();
        System.out.println("完成任務一,耗時:" + (end - start) + "毫秒");
    }
    // 任務二
    @Async
    public void doTaskTwo() throws Exception {
        System.out.println("開始做任務二");
        long start = System.currentTimeMillis();
        Thread.sleep(5000);
        long end = System.currentTimeMillis();
        System.out.println("完成任務二,耗時:" + (end - start) + "毫秒");
    }
    // 任務3
    @Async
    public void doTaskThree() throws Exception {
        System.out.println("開始做任務三");
        long start = System.currentTimeMillis();
        Thread.sleep(8000);
        long end = System.currentTimeMillis();
        System.out.println("完成任務三,耗時:" + (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);
	}
}

編寫測試類,源碼如下。

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 注解實現(xiàn)異步任務
 * @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 =====";
    }
}

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

開始做任務三
開始做任務一
開始做任務二
完成任務一,耗時:2992毫秒
完成任務二,耗時:4987毫秒
完成任務三,耗時:7980毫秒

三、注意事項

1、在 @SpringBootApplication 啟動類添加注解@EnableAsync;

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

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

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

相關文章

最新評論