1. 程式人生 > 其它 >SpringBoot下@EnableAsync與@Async非同步任務的使用

SpringBoot下@EnableAsync與@Async非同步任務的使用

參考:

https://www.cnblogs.com/tsangyi/p/13303018.html

https://www.cnblogs.com/dudou/p/15136180.html

一、前言

我們在使用多執行緒的時候,往往需要建立Thread類,或者實現Runnable介面,如果要使用到執行緒池,我們還需要來建立Executors。

在使用spring中,已經給我們做了很好的支援。只要要 @EnableAsync 就可以使用多執行緒。使用 @Async 就可以定義一個執行緒任務。通過spring給我們提供的ThreadPoolTaskExecutor就可以使用執行緒池。

預設情況下,Spring將搜尋相關的執行緒池定義:要麼在上下文中搜索唯一的TaskExecutor

bean,要麼搜尋名為“taskExecutor”的Executor bean。如果兩者都無法解析,則將使用SimpleAsyncTaskExecutor來處理非同步方法呼叫。


業務需求:

  比如使用者在下單完成的時候,有兩個任務同時執行,分別是發快遞和給使用者傳送簡訊兩個事情要做,我們知道在Java中程式碼都是依次執行的,比如傳送快遞需要3秒鐘,傳送簡訊需要1秒鐘。

這兩個事件沒有先前先後的關係,那麼完全可以兩個事情一起做,非同步任務就是來解決這個問題的!

二、程式碼實現

目錄結構:

 

 1、定義業務介面:com.service

傳送簡訊:AsyncEmailService

/**
 * @ClassName AsyncService
 * @Author zhangzhixi
 * @Description 傳送簡訊業務
 * @Date 2022-3-29 20:08
 * @Version 1.0
 */
public interface AsyncEmailService {
    /**
     * 傳送簡訊
     */
    void executeAsync();
}

傳送快遞: