国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

異步處理:Spring @Async 注解深度剖析!

開發
Spring @Async 注解提供了一個非常簡單而且強大的機制來支持異步方法的執行。這篇文章,我們來深度剖析 Spring @Async 的工作原理!

Spring @Async 注解提供了一個非常簡單而且強大的機制來支持異步方法的執行。如果將方法標記為@Async,Spring會在后臺線程中異步執行該方法,而不會阻塞調用該方法的線程。這對于提高應用程序的響應性和性能是非常有用的,尤其是在處理I/O密集型操作時。這篇文章,我們來深度剖析 Spring @Async 的工作原理!

1. 原理概述

使用@Async注解時,Spring 借助 AOP(面向切面編程)實現異步執行,具體來說,@Async的工作原理主要包括以下幾個步驟:

  • 代理對象創建:Spring 使用動態代理創建被注解方法的代理對象。只有與代理對象交互時,@Async 注解才會起作用。
  • 線程池配置:異步方法調用通過 Spring 提供的 TaskExecutor(如 SimpleAsyncTaskExecutor, ThreadPoolTaskExecutor 等)來實現多線程處理。開發者可以自定義線程池設置,以適應不同的使用場景。
  • 方法執行:當調用被 @Async 注解的方法時,Spring 將檢測到這個注解,然后將方法的調用委托給一個線程池中的線程。在這個線程執行完成后,控制權就會返回到調用線程,不會被阻塞。

2. 核心代碼分析

下面我們深入探討@Async的幾個核心類的實現細節。

(1) @Async 注解

@Async注解的定義非常簡單,位于org.springframework.scheduling.annotation包中:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Async {
    String value() default "";
}

通過上面的源碼可以看出:@Async注解只支持放在方法上,并可以指定一個可選的線程池名稱。

(2) AsyncConfiguration類

要啟用異步處理功能,我們需要有一個配置類或在Spring Boot應用程序中使用@EnableAsync注解。這個注解會觸發 Spring的異步支持機制。

@Configuration
@EnableAsync
public class AsyncConfig extends AsyncConfigurerSupport {
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(25);
        executor.initialize();
        return executor;
    }
}

在這個示例中,我們擴展了AsyncConfigurerSupport類,并重寫了getAsyncExecutor方法來提供自定義的線程池。

(3) Proxy 生成

Spring 通過 AOP 動態代理機制處理 @Async 注解。具體過程如下:

  • Spring 在創建代理對象時,檢查被注解的方法。
  • 如果發現方法上有 @Async 注解,Spring 將為這個方法生成一個增強版本,以確保調用被轉發到線程池中的一個工作線程。

通常,Spring 會使用 JDK 動態代理或者 CGLIB 代理。JDK 代理基于接口創建代理實例,而 CGLIB 可以基于類創建代理實例。

(4) 異步方法的調用

以下是 @Async 方法的簡單示例:

@Service
public class MyAsyncService {
    @Async
    public void asyncMethod() {
        System.out.println("Executing in " + Thread.currentThread().getName());
    }
}

調用 asyncMethod() 方法時,控制將立即返回,不會阻塞。實際方法將在其他線程中執行。

(5) AsyncExecutionInterceptor

AsyncExecutionInterceptor 類是 Spring 處理異步執行的核心部分。它實現了 MethodInterceptor 接口,能夠攔截方法調用,進行異步執行處理。

public class AsyncExecutionInterceptor extends AbstractAsyncExecutionInterceptor {
    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        return doInvoke(invocation);
    }
}

在 invoke 方法中,doInvoke 方法會被調用,負責具體的執行邏輯。

3.示例

為了更好地理解 @Async 的使用,我們通過一個完整的示例來演示如何使用 Spring @Async 注解實現異步方法調用,示例將包含以下部分:

  • Spring Boot 項目結構。
  • @Async 注解的實現和配置。
  • 異步方法的調用示例。
  • 運行時的輸出示例。

(1) 創建 Spring Boot 項目

假設你使用 Spring Boot 創建項目,可以創建一個新的 Gradle 或 Maven 項目,添加以下依賴項到 pom.xml(如果使用 Maven):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

(2) 配置異步支持

創建一個配置類來啟用異步支持,使用 @EnableAsync 注解。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;

@Configuration
@EnableAsync
public class AsyncConfig {
    
    @Bean(name = "taskExecutor")
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(5);
        executor.setQueueCapacity(10);
        executor.setThreadNamePrefix("Async-");
        executor.initialize();
        return executor;
    }
}

(3) 創建異步服務類

接下來,創建一個服務類,其中將包含異步方法。該方法將模擬一些耗時的操作。

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class MyAsyncService {

    @Async("taskExecutor")
    public void asyncMethod() {
        System.out.println("Executing async method: " + Thread.currentThread().getName());
        try {
            // 模擬耗時的操作
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Async method execution finished: " + Thread.currentThread().getName());
    }
}

(4) 創建控制器類

創建一個控制器類,調用異步服務中的方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyAsyncController {

    @Autowired
    private MyAsyncService myAsyncService;

    @GetMapping("/asyncTest")
    public String callAsync() {
        System.out.println("Calling async method");
        myAsyncService.asyncMethod();
        return "Async method called!";
    }
}

(5) 主應用程序類

創建 Spring Boot 啟動類,用于啟動應用程序:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AsyncApplication {

    public static void main(String[] args) {
        SpringApplication.run(AsyncApplication.class, args);
    }
}

(6) 運行應用程序

啟動 Spring Boot 應用程序,在瀏覽器中訪問以下 URL:http://localhost:8080/asyncTest

輸出結果為:

Calling async method
Executing async method: Async-1
Async method execution finished: Async-1

在瀏覽器中,頁面將返回 “Async method called!” 的信息,而不會等待 asyncMethod 完成執行。這表示 asyncMethod 在另一個線程上異步執行。

4. 總結

通過以上分析,我們可以看到 Spring 的@Async提供了異步編程的簡便機制。它的實現依賴于 AOP代理,以及可配置的線程池。透過這些機制,Spring 能夠將對異步方法的調用轉發到后臺線程中執行,同時保證主線程不會被阻塞。

責任編輯:趙寧寧 來源: 猿java
相關推薦

2024-06-13 00:54:19

2024-12-24 14:01:10

2021-08-04 17:20:30

阿里巴巴AsyncJava

2024-05-07 08:23:03

Spring@Async配置

2024-08-22 10:39:50

@Async注解代理

2025-04-08 00:00:00

@AsyncSpring異步

2017-04-19 08:47:42

AsyncJavascript異步代碼

2018-09-18 16:20:08

Asyncjavascript前端

2024-12-23 08:00:45

2018-06-21 14:46:03

Spring Boot異步調用

2024-07-12 14:46:20

2025-09-26 01:25:00

2021-11-11 15:25:28

@AsyncJava線程池

2024-03-28 12:51:00

Spring異步多線程

2022-09-27 18:56:28

ArrayList數組源代碼

2024-02-05 19:06:04

DartVMGC流程

2025-06-04 08:30:00

seata分布式事務開發

2025-01-08 10:35:26

代碼開發者Spring

2021-03-29 09:26:44

SpringBoot異步調用@Async

2014-07-15 10:08:42

異步編程In .NET
點贊
收藏

51CTO技術棧公眾號

91成人超碰| 成人51免费| 好吊日精品视频| 亚洲精品在线不卡| 美女xx视频| 成人性视频免费网站| 国产中文字幕91| 345成人影院| 国产视频不卡一区| 欧美日韩最好看的视频| 精品国产第一福利网站| 国产精品色在线观看| 久久99国产精品99久久| 北条麻妃一区二区三区在线| 欧美午夜理伦三级在线观看| 91九色porny视频| 久久99国产精品久久99| 2019中文在线观看| 日韩深夜视频| 日韩欧美成人精品| 一区二区91美女张开腿让人桶| 欧美精品不卡| 欧美中在线观看| 99久久香蕉| 久久乐国产精品| 国产日韩欧美中文在线| 欧美日韩裸体免费视频| 国语对白在线视频| 亚洲色图19p| 亚洲欧美99| 女人色偷偷aa久久天堂| 欧美性在线视频| 欧美性aaa| 亚洲男人第一网站| 超级碰碰久久| 亚洲福利视频免费观看| 草莓福利社区在线| 首页国产欧美日韩丝袜| 欧美在线一区二区三区四区| 小处雏高清一区二区三区| 欧洲亚洲在线视频| 老司机成人在线| 九九九久久久久久| 香蕉精品久久| 国产在线高清精品| 精品一区二区综合| 亚洲精品日韩久久久| 丝袜综合欧美| 日韩av中文字幕在线播放| 搞黄视频免费在线观看| 精品捆绑美女sm三区| 三妻四妾的电影电视剧在线观看| 久久久精品国产| 不卡在线一区二区| 国产在线精品播放| 狠狠狠色丁香婷婷综合久久五月| 日韩亚洲欧美视频| 色综合 综合色| 亚洲精品一二三**| ww国产内射精品后入国产| 日韩欧美999| 啪啪亚洲精品| 免费高清成人| 国内精品小视频| 久久久久久免费毛片精品| 5566av亚洲| 久久精品国产www456c0m| 国产不卡一区二区视频| 久久伊99综合婷婷久久伊| 网站一区二区三区| 欧美另类交人妖| 狠狠综合久久av一区二区小说| 亚洲性人人天天夜夜摸| 久久综合网导航| 欧美日韩不卡在线视频| 久久免费少妇高潮久久精品99| 国产精品丝袜91| 欧美在线高清| 成人ssswww在线播放| 精品久久久久久无码中文野结衣| 亚洲视频在线免费看| 久久蜜桃av一区二区天堂 | 国产精品久久| 亚洲国内精品| 婷婷丁香在线| 福利在线一区二区| 欧美一级黑人aaaaaaa做受| 亚洲国产毛片aaaaa无费看 | 国产精品免费一区二区三区观看 | 美女一级全黄| 久久久99国产精品免费| 在线观看亚洲视频| 欧美视频裸体精品| 欧美极品美女视频| 成人高清视频在线| 99re亚洲国产精品| 日韩电影免费观| 校园春色 亚洲色图| 亚洲精品理论电影| 成人av在线观| 美女福利一区| 成人中文字幕在线| 精品福利视频导航大全| 亚洲裸体xxxx| 国产黄色91视频| 成人综合网站| 污版网站在线观看| 91亚洲精品久久久久久久久久久久| 夜夜揉揉日日人人青青一国产精品| 国产99亚洲| 午夜在线视频播放| 隔壁人妻偷人bd中字| 热久久这里只有精品| 欧美日韩国产另类不卡| 久久成人免费电影| 欧美少妇xxxx| 日韩av超清在线观看| 日本不卡1区2区3区| 色综合久久久久久久久五月| 欧美日韩xxx| 欧美变态凌虐bdsm| 国产免费久久精品| 亚洲在线观看| 色综合久久一区二区三区| 欧美日一区二区三区| 日韩av高清在线| 91精品国产91久久久久麻豆 主演| 国产精品视频yy9099| 日韩精品一区二区在线观看| 成人免费小视频| 国产综合色视频| 久久福利一区| 国内精品视频在线观看| 欧美精选视频一区二区| 精品一二三区视频| 淫视频在线观看| 天堂一区在线观看| av在线观看地址| **亚洲第一综合导航网站| 69久久夜色精品国产69| 丝袜美腿精品国产二区| 精品视频偷偷看在线观看| 欧美久久高跟鞋激| 国产精品青草综合久久久久99| 国产一区二区三区四区五区美女| 欧美r级电影| av中文一区| 图片一区二区| 一区二区免费| 韩国精品视频在线观看| 久久人体av| 在线能看的av网址| 日韩成人在线电影| 狂野欧美xxxx韩国少妇| 99久久精品免费看国产小宝寻花 | 国产精品高潮粉嫩av| 国产成人精品免高潮费视频| 性欧美xxxx交| 亚洲伊人久久大香线蕉av| 精品国产一二| 久久久久久久久一区二区| 蜜桃av色综合| 特级西西444www大精品视频| 手机看片日韩国产| 国产伦精品一区二区三毛| 鲁鲁狠狠狠7777一区二区| 精品中文字幕一区| 亚洲图片在线观看| 青青青在线播放| 欧美黑人巨大| 日韩激情av| 国产日本亚洲| 自由日本语亚洲人高潮| 亚洲激情视频| 国产欧美日本一区视频| 91成人在线观看喷潮| 日韩色在线观看| 欧美高清无遮挡| 看高清中日韩色视频| 成人毛片视频网站| а√中文在线8| 伊人精品一区| 国产成人免费在线视频| 五月婷婷欧美视频| 最近2019年中文视频免费在线观看 | 免费电影日韩网站| 日韩欧美一区二区三区免费看| 男人天堂欧美日韩| 亚洲自拍偷拍欧美| 久久久91精品| 国产手机视频在线观看| 韩国中文免费在线视频| 国产一精品一av一免费爽爽| 中文欧美日韩| 日本一区二区三区在线不卡| 精品高清美女精品国产区| 久久99国产精品自在自在app| 久久99欧美| 免费在线看v| 国产精品多人|