精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:說說@Async實(shí)現(xiàn)原理?

開發(fā) 前端
在 AsyncAnnotationAdvisor 中,會(huì)使用 AsyncExecutionInterceptor 來(lái)處理 @Async 注解,它會(huì)在被 @Async 注解標(biāo)識(shí)的方法被調(diào)用時(shí),創(chuàng)建一個(gè)異步代理對(duì)象來(lái)執(zhí)行方法。這個(gè)異步代理對(duì)象會(huì)在一個(gè)新的線程中調(diào)用被 @Async 注解標(biāo)識(shí)的方法,從而實(shí)現(xiàn)方法的異步執(zhí)行。

@Async 是 Spring 3.0 提供的一個(gè)注解,用于標(biāo)識(shí)某類(下的公共方法)或某方法會(huì)執(zhí)行異步調(diào)用。

接下來(lái),我們來(lái)看下  @Async 的基本使用和實(shí)現(xiàn)原理。

1.基本使用

@Async 基本使用可以分為以下 3 步:

  1. 項(xiàng)目中開啟異步支持
  2. 創(chuàng)建異步方法
  3. 調(diào)用異步方法

1.1 開啟異步支持

以 Spring Boot 項(xiàng)目為例,我們首先需要在 Spring Boot 的啟動(dòng)類,也就是帶有@SpringBootApplication 注解的類上添加 @EnableAsync 注解,以開啟異步方法執(zhí)行的支持,如下代碼所示:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
@EnableAsync
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

1.2 創(chuàng)建異步方法

創(chuàng)建異步方法是在需要異步執(zhí)行的方法上添加 @Async 注解,這個(gè)方法一定是要放在被 IoC 容器管理的 Bean 中,只有被 IoC 管理的類才能實(shí)現(xiàn)異步調(diào)用,例如在帶有 @Service 注解的類中創(chuàng)建異步方法:

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

@Service
public class AsyncService {

    @Async
    public void performAsyncTask() {
        // 這里放置需要異步執(zhí)行的代碼
        System.out.println("異步任務(wù)正在執(zhí)行,當(dāng)前線程:" + Thread.currentThread().getName());
    }
}

1.3 調(diào)用異步方法

在其他類或方法中,通過注入這個(gè)服務(wù)類的實(shí)例來(lái)調(diào)用異步方法。注意,直接在同一個(gè)類內(nèi)部調(diào)用不會(huì)觸發(fā)異步行為,必須通過注入的實(shí)例調(diào)用,使用 new 創(chuàng)建的對(duì)象也不能進(jìn)行異步方法調(diào)用,具體實(shí)現(xiàn)代碼如下:

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

@RestController
public class MyController {

    @Autowired
    private AsyncService asyncService;

    @GetMapping("/startAsync")
    public String startAsyncTask() {
        asyncService.performAsyncTask();
        return "異步任務(wù)已啟動(dòng)";
    }
}

2.實(shí)現(xiàn)原理

簡(jiǎn)單來(lái)說,@Async 注解是由 AOP(面向切面)實(shí)現(xiàn)的,具體來(lái)說,它是由 AsyncAnnotationAdvisor 這個(gè)切面類來(lái)實(shí)現(xiàn)的。

在 AsyncAnnotationAdvisor 中,會(huì)使用 AsyncExecutionInterceptor 來(lái)處理 @Async 注解,它會(huì)在被 @Async 注解標(biāo)識(shí)的方法被調(diào)用時(shí),創(chuàng)建一個(gè)異步代理對(duì)象來(lái)執(zhí)行方法。這個(gè)異步代理對(duì)象會(huì)在一個(gè)新的線程中調(diào)用被 @Async 注解標(biāo)識(shí)的方法,從而實(shí)現(xiàn)方法的異步執(zhí)行。

在 AsyncExecutionInterceptor 中,核心方法是 getDefaultExecutor 方法,使用此方法來(lái)獲取一個(gè)線程池來(lái)執(zhí)行被 @Async 注解修飾的方法,它的實(shí)現(xiàn)源碼如下:

@Nullable
protected Executor getDefaultExecutor(@Nullable BeanFactory beanFactory) {
    Executor defaultExecutor = super.getDefaultExecutor(beanFactory);
    return (Executor)(defaultExecutor != null ? defaultExecutor : new SimpleAsyncTaskExecutor());
}

此方法實(shí)現(xiàn)比較簡(jiǎn)單,它是先嘗試調(diào)用父類 AsyncExecutionAspectSupport#getDefaultExecutor 方法獲取線程池,如果父類方法獲取不到線程池再用創(chuàng)建 SimpleAsyncTaskExecutor 對(duì)象作為 Async 的線程池返回。

而 SimpleAsyncTaskExecutor 中在執(zhí)行任務(wù)時(shí)是這樣的:

protected void doExecute(Runnable task) {
    this.newThread(task).start();
}

可以看出,在 Spring 框架中如果使用默認(rèn)的 @Async 注解,它的執(zhí)行比較簡(jiǎn)單粗暴,并沒有使用線程池,而是每次創(chuàng)建線程來(lái)執(zhí)行,所以在 Spring 框架中是不能直接使用 @Async 注解的,需要使用 @Async 注解搭配自定義的線程池,既實(shí)現(xiàn) AsyncConfigurer 接口來(lái)提供自定義的 ThreadPoolTaskExecutor 來(lái)創(chuàng)建線程池,以確保 @Async 能真正的使用線程池來(lái)執(zhí)行異步任務(wù)。

然而,在 Spring Boot 中,因?yàn)樵诳蚣軉?dòng)時(shí),自動(dòng)注入了 ThreadPoolTaskExecutor,如下源碼所示:

@ConditionalOnClass({ThreadPoolTaskExecutor.class})
@AutoConfiguration
@EnableConfigurationProperties({TaskExecutionProperties.class})
@Import({TaskExecutorConfigurations.ThreadPoolTaskExecutorBuilderConfiguration.class, TaskExecutorConfigurations.TaskExecutorBuilderConfiguration.class, TaskExecutorConfigurations.SimpleAsyncTaskExecutorBuilderConfiguration.class, TaskExecutorConfigurations.TaskExecutorConfiguration.class})
public class TaskExecutionAutoConfiguration {
    public static final String APPLICATION_TASK_EXECUTOR_BEAN_NAME = "applicationTaskExecutor";

    public TaskExecutionAutoConfiguration() {
    }
}

具體的構(gòu)建細(xì)節(jié)源碼如下:

@Bean
@ConditionalOnMissingBean({TaskExecutorBuilder.class, ThreadPoolTaskExecutorBuilder.class})
ThreadPoolTaskExecutorBuilder threadPoolTaskExecutorBuilder(TaskExecutionProperties properties, ObjectProvider<ThreadPoolTaskExecutorCustomizer> threadPoolTaskExecutorCustomizers, ObjectProvider<TaskExecutorCustomizer> taskExecutorCustomizers, ObjectProvider<TaskDecorator> taskDecorator) {
    TaskExecutionProperties.Pool pool = properties.getPool();
    ThreadPoolTaskExecutorBuilder builder = new ThreadPoolTaskExecutorBuilder();
    builder = builder.queueCapacity(pool.getQueueCapacity());
    builder = builder.corePoolSize(pool.getCoreSize());
    builder = builder.maxPoolSize(pool.getMaxSize());
    builder = builder.allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout());
    builder = builder.keepAlive(pool.getKeepAlive());
    TaskExecutionProperties.Shutdown shutdown = properties.getShutdown();
    builder = builder.awaitTermination(shutdown.isAwaitTermination());
    builder = builder.awaitTerminationPeriod(shutdown.getAwaitTerminationPeriod());
    builder = builder.threadNamePrefix(properties.getThreadNamePrefix());
    Stream var10001 = threadPoolTaskExecutorCustomizers.orderedStream();
    Objects.requireNonNull(var10001);
    builder = builder.customizers(var10001::iterator);
    builder = builder.taskDecorator((TaskDecorator)taskDecorator.getIfUnique());
    builder = builder.additionalCustomizers(taskExecutorCustomizers.orderedStream().map(this::adapt).toList());
    return builder;
}

因此在 Spring Boot 框架中可以直接使用 @Async 注解,無(wú)需擔(dān)心它每次都會(huì)創(chuàng)建線程來(lái)執(zhí)行的問題

責(zé)任編輯:武曉燕 來(lái)源: 磊哥和Java
相關(guān)推薦

2025-04-08 00:00:00

@AsyncSpring異步

2024-03-05 10:33:39

AOPSpring編程

2024-02-29 16:49:20

volatileJava并發(fā)編程

2024-08-29 16:30:27

2024-08-12 17:36:54

2024-03-14 14:56:22

反射Java數(shù)據(jù)庫(kù)連接

2024-03-28 10:37:44

IoC依賴注入依賴查找

2024-07-31 08:28:37

DMAIOMMap

2024-12-06 07:00:00

2024-09-20 08:36:43

零拷貝數(shù)據(jù)傳輸DMA

2024-03-22 06:56:24

零拷貝技術(shù)數(shù)據(jù)傳輸數(shù)據(jù)拷貝

2021-05-20 08:34:03

CDN原理網(wǎng)絡(luò)

2025-02-28 00:00:00

2024-06-04 09:02:03

2024-11-15 15:27:09

2021-06-07 17:12:22

線程安全Atomic

2025-04-07 00:00:00

MySQL數(shù)據(jù)庫(kù)服務(wù)器

2024-03-01 11:33:31

2024-12-04 14:45:14

零拷貝技術(shù)CPU 拷貝Zero-copy

2024-07-05 17:47:21

@Async項(xiàng)目啟動(dòng)類
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

激情开心成人网| 蜜桃视频在线免费| 亚洲精品欧美| 亚洲丝袜一区在线| 亚洲第一区第二区第三区| 日本三级在线观看网站| 久久久久久久久一| 91沈先生播放一区二区| www.久久视频| 欧美日本不卡| 夜夜嗨av一区二区三区四区 | 国产一区福利视频| 小泽玛利亚一区二区三区视频| 911久久香蕉国产线看观看| 亚洲国产古装精品网站| 亚洲精品久久久中文字幕| 国产极品人妖在线观看| 国产欧美一区二区三区网站| 国产v亚洲v天堂无码| 这里只有精品免费视频| 91久久视频| 欧美成人一二三| 国产精品高清无码在线观看| 日韩有吗在线观看| 欧美日韩一区国产| av无码精品一区二区三区| 日本高清成人vr专区| 中文在线免费一区三区高中清不卡| 成人国产一区二区| 国产女人18毛片18精品| 日韩av一级片| 欧美有码在线观看| 久久久久国产精品www| gogogo高清免费观看在线视频| 日本不卡免费高清视频在线| 亚洲乱码国产乱码精品精98午夜 | 欧美日韩国产中文字幕在线| 国产成人午夜电影网| 国产在线视频一区| 亚洲视屏在线观看| 久久久久在线| 69国产精品成人在线播放| 精国产品一区二区三区a片| 色综合久久网| 色婷婷**av毛片一区| 亚洲理论片在线观看| 婷婷综合电影| 日韩精品在线观看网站| a级一a一级在线观看| jizz性欧美23| 精品va天堂亚洲国产| 佐佐木明希电影| 午夜视频在线观看精品中文 | 手机亚洲第一页| 成人av资源站| 精品毛片久久久久久| 天堂av资源网| av日韩在线网站| 精品国产综合久久| 五月婷中文字幕| 91视频在线看| 欧美一级二级三级九九九| 麻豆av电影在线观看| 久久久久久日产精品| 日韩视频专区| 人人干在线视频| 亚洲日本一区二区| 国产aaa免费视频| a在线视频v视频| 欧美小视频在线| 黄色三级视频片| 欧美大黑帍在线播放| 九色视频网站在线观看| 国产欧美综合色| 亚洲在线视频一区二区| av中文字幕在线观看| 一区二区三区在线观看视频| 国产精品国产亚洲精品看不卡| 午夜影院一区| 欧美日韩一区精品| 中文字幕第22页| 澳门成人av| 亚洲图片在区色| 欧美激情精品久久久久久免费| 国产精品扒开腿做爽爽爽软件| 高清视频欧美一级| 久久久久久亚洲av无码专区| 国产在线乱码一区二区三区| 国产精品精品软件视频| 成年人在线看| 一区二区日韩电影| 国产成人无码一二三区视频| 四虎国产精品永久在线国在线| 日韩精品在线看片z| 四虎永久免费影院| 天天精品视频| 欧美一级免费看| 国产又大又黑又粗| 97久久超碰国产精品| 中文字幕一区二区三区5566| 538视频在线| 欧美日韩的一区二区| 日本国产在线视频| 99精品综合| 欧美在线免费观看| 国产手机av在线| 国产日韩精品一区二区三区| 免费成人深夜夜行网站视频| 亚洲午夜天堂| 精品日本一线二线三线不卡| 极品蜜桃臀肥臀-x88av| 亚洲欧洲日本mm| 91免费看片在线| 韩日视频在线| 岛国av一区二区三区| xxxx国产视频| 好吊日av在线| 亚洲最大av| 久久av.com| 中文字幕在线视频免费| 久久综合九色综合97婷婷女人 | 激情婷婷欧美| 成人黄色午夜影院| 国产天堂在线| 欧美性猛交xxxx乱大交| 韩国三级在线看| 99精品电影| 国产精品高清免费在线观看| 欧美一级淫片免费视频魅影视频| 国产精品免费看片| www.日日操| 欧美巨大xxxx| 97成人超碰免| 人妻一区二区三区免费| 亚洲精品日韩一| www,av在线| 国产精品7m凸凹视频分类| 国产精品久久一区主播| 国产精品高潮呻吟AV无码| 国产在线麻豆精品观看| 亚洲精品一品区二品区三品区| 僵尸再翻生在线观看免费国语| 日韩欧美国产综合在线一区二区三区| 影音先锋男人资源在线观看| 热久久一区二区| 日韩av在线电影观看| 欧美一级大黄| 亚洲人成在线播放| 亚洲精品国产无码| 国产视频在线观看一区二区三区| 日韩欧美在线播放视频| 日韩最新在线| 欧美一区深夜视频| 国产在线中文字幕| 欧美在线观看18| 免费成人深夜天涯网站| 免费黄网站欧美| 中文字幕av日韩精品| av在线成人| 色在人av网站天堂精品| 亚洲精品国产一区二| 亚洲午夜激情网页| 国产激情视频网站| 久久精品亚洲| 亚洲国产精品v| 自拍偷拍一区二区三区| 国产一区二区三区黄网站| 成人av在线资源| www.69av| 日韩激情欧美| 国内精品久久久| 亚洲色大成网站www| 色先锋资源久久综合| 一级黄色片网址| 久久国产精品72免费观看| 午夜啪啪免费视频| 第四色在线一区二区| 欧洲永久精品大片ww免费漫画| 国产中文字幕在线视频| 555www色欧美视频| 日韩欧美性视频| 国产欧美日韩三级| 天美一区二区三区| 一区二区毛片| 在线视频不卡国产| 国产劲爆久久| 国产精品久久久久久影视| 国产鲁鲁视频在线观看特色| 日韩av在线免费| 亚洲综合精品在线| 亚洲va欧美va人人爽午夜| 亚洲午夜福利在线观看| 激情欧美日韩一区二区| 人妻无码久久一区二区三区免费| 欧美日韩伦理在线免费| 91一区二区三区| 亚洲天堂一区二区| 欧美成aaa人片在线观看蜜臀| 亚洲欧美日韩动漫| 日韩一区二区三区精品视频 | 黄色软件在线| 日韩欧美一区在线| 无码人妻熟妇av又粗又大| 亚洲另类春色国产| 在线观看国产精品一区| 丁香婷婷综合色啪| 依人在线免费视频| 亚洲一区二区网站| 国产激情片在线观看| 国产麻豆一区二区三区精品视频| 亚洲直播在线一区| 成人午夜在线| 欧美一级视频一区二区| 婷婷av在线| 精品国产一区二区三区久久久狼| 亚洲国产精品影视| 欧美大片1688网站| 国内精品小视频在线观看| 免费在线观看av片| 国产午夜精品一区二区三区| 天天插天天干天天操| 欧美一三区三区四区免费在线看| 成人一级免费视频| 都市激情亚洲色图| 亚洲精品午夜久久久久久久| 中文字幕亚洲视频| 国产三级av在线播放| 99久久婷婷国产精品综合| 无码人妻久久一区二区三区蜜桃 | 免费看的av网站| 黑人巨大精品欧美黑白配亚洲| 久久久久久久久久福利| 一区二区三区导航| 国产精品国产对白熟妇| 黄色成人在线网站| 成年在线观看视频| 午夜欧美精品| a级片一区二区| 一区二区三区网站| 久久久久久久久影视| 欧美在线亚洲综合一区| 在线视频欧美一区| 婷婷精品进入| 福利网在线观看| 婷婷久久一区| 男人日女人的bb| 欧美在线精品一区| 日本精品福利视频| 综合精品久久| 青草网在线观看| 亚洲国产电影| 国产青青在线视频| 久久天天综合| 激情网站五月天| 蜜桃在线一区二区三区| 污污的视频免费| 狠狠久久亚洲欧美| 岛国精品一区二区三区| 99久久精品费精品国产一区二区| 久久久久亚洲AV成人无码国产| 97se狠狠狠综合亚洲狠狠| 美国黄色a级片| 久久久不卡影院| 久久噜噜色综合一区二区| 亚洲欧美日韩国产一区二区三区| 放荡的美妇在线播放| 亚洲国产欧美在线| 黑人一级大毛片| 欧美日韩在线播放三区| 99在线无码精品入口| 欧美国产1区2区| 色狠狠久久av五月综合| 成人av地址| 欧美二区在线看| 欧美电影《睫毛膏》| 日韩精品一区二区三区电影| 日韩视频三区| www.超碰com| 国产盗摄女厕一区二区三区| 久久精品女同亚洲女同13| 久久久精品免费免费| 粉嫩av性色av蜜臀av网站| 亚洲亚洲人成综合网络| 成年人视频在线免费看| 欧美日韩高清影院| 手机看片1024国产| 伊人久久男人天堂| 1stkiss在线漫画| 日本午夜在线亚洲.国产| 疯狂欧洲av久久成人av电影| 精品免费国产| 99久久精品国产亚洲精品| a级黄色小视频| 久久av老司机精品网站导航| 成熟妇人a片免费看网站| 国产精品色在线| 久草国产精品视频| 欧美高清视频在线高清观看mv色露露十八 | 欧美日韩国产色站一区二区三区| 亚洲精品久久久久avwww潮水| 亚洲天堂av女优| 男男gaygays亚洲| 国产精品狼人色视频一区| 国产精品网站在线看| 亚洲一区二区在线观| 亚洲综合国产| 深夜视频在线观看| 国产精品色哟哟| 人人爽人人爽人人片av| 日韩视频免费直播| 91官网在线| 日韩av手机在线观看| 成人偷拍自拍| 97超碰人人爱| 久久99精品国产.久久久久久 | 亚瑟一区二区三区四区| 亚洲色婷婷久久精品av蜜桃| 免费成人在线观看视频| 麻豆精品免费视频| 亚洲高清不卡在线| 国产视频一区二区三| 上原亚衣av一区二区三区| 久久精品影视大全| 蜜桃视频在线观看一区| 性欧美丰满熟妇xxxx性仙踪林| 一区二区三区四区亚洲| 亚洲字幕av一区二区三区四区| 亚洲免费av网址| 天堂中文最新版在线中文| 国产日韩欧美一区二区| 欧美激情综合| 亚洲欧美日韩中文字幕在线观看| 成人免费在线播放视频| 亚洲最大成人在线视频| 夜夜嗨av一区二区三区四区| 日韩精选视频| 日本在线播放一区| 日韩在线观看一区二区| 亚洲欧美色图视频| 亚洲18女电影在线观看| 人妻无码中文字幕免费视频蜜桃| 美日韩精品免费观看视频| 超碰国产精品一区二页| 一区二区三区我不卡| 蜜桃传媒麻豆第一区在线观看| 99在线视频免费| 欧美色倩网站大全免费| 尤物在线视频| 成人精品视频在线| 99久久精品网| gogo亚洲国模私拍人体| 亚洲欧美偷拍卡通变态| av在线资源观看| 欧美激情伊人电影| 久久97久久97精品免视看秋霞| 日韩 欧美 视频| 99视频在线精品| 无码人妻aⅴ一区二区三区有奶水| 亚洲视频精品在线| 粉嫩91精品久久久久久久99蜜桃| 五月天亚洲综合情| 极品销魂美女一区二区三区| 外国一级黄色片| 亚洲精品一区二区三区福利 | 国产综合在线观看| 国产精品欧美亚洲777777| 国产精品毛片久久| 日本成人在线免费| 欧美日韩日本国产| 精品无吗乱吗av国产爱色| 成人黄色免费看| 狠狠入ady亚洲精品| 亚洲午夜福利在线观看| 欧美日韩国产在线播放网站| 制服丝袜在线播放| 麻豆久久久9性大片| 久久av中文字幕片| av资源吧首页| 一区二区三区美女xx视频| 成人精品视频在线观看| 蜜臀av无码一区二区三区| 国产亚洲一区二区在线观看| 国产视频手机在线| 亚洲欧美日韩在线| 免费a在线观看播放| 亚洲va中文字幕| 日韩精品黄色| 国产精品视频入口| 蜜臀久久久99精品久久久久久| 久久国产在线观看| 亚洲精选一区二区| 欧美激情精品| 88av.com| 亚洲18女电影在线观看| 日韩在线观看www| 国产一级特黄a大片99| 久久国产精品无码网站| 日韩三级免费看| 日韩中文字幕免费看| 香蕉久久夜色精品国产使用方法|