日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
快速搞懂Spring中實(shí)現(xiàn)異步調(diào)用的方式有哪些?

? 一位3年工作經(jīng)驗(yàn)的小伙伴被問(wèn)到這樣一道面試題,說(shuō)Spring中實(shí)現(xiàn)異步調(diào)用的方式有哪些?

成都創(chuàng)新互聯(lián)主要業(yè)務(wù)有網(wǎng)站營(yíng)銷策劃、成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、微信公眾號(hào)開發(fā)、微信平臺(tái)小程序開發(fā)、H5頁(yè)面制作、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當(dāng)客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過(guò)程中,公司還積累了豐富的行業(yè)經(jīng)驗(yàn)、成都營(yíng)銷網(wǎng)站建設(shè)資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。 

今天,我給大家分享一下我的理解。

在Spring中,實(shí)現(xiàn)異步調(diào)用主要有三種方式,分別是注解方式、內(nèi)置線程池方式和自定義線程池方式。

1、注解方式

可以在配置類和方法上加特定注解。首先,在配置類加上@EnableAsync來(lái)啟用異步注解,

如代碼所示:

@EnableAsync//啟用異步支持 @Configuration public class AppConfig { }

然后,使用@Async注解標(biāo)記需要異步執(zhí)行的方法,

如代碼所示:

@Async void doSomething() { // this will be run asynchronously } @Async void doSomething(String s) { // this will be run asynchronously } @Async Future returnSomething(int i) { // this will be run asynchronously }

使用@Async標(biāo)記的異步方法可以帶參數(shù),也可以帶有返回值。返回值類型必須是java.util.concurrent.Future或其子類,可以是以下3種類型:

1)由Java原生API提供的Future。

2)由Spring提供的ListenableFuture后者AsyncResult。

3)Java 8提供的CompletableFuture。

需要說(shuō)明的是,@Async默認(rèn)會(huì)使用SimpleAsyncTaskExecutor來(lái)執(zhí)行,而這個(gè)線程池不會(huì)復(fù)用線程。所以,通常要使用異步處理,我們都會(huì)自定義線程池。

2、內(nèi)置線程池方式

可以使用Spring內(nèi)置的線程池來(lái)實(shí)現(xiàn)異步調(diào)用,比如ThreadPoolTaskExecutor 和SimpleAsyncTaskExecutor。Spring提供了許多TaskExecutor的內(nèi)置實(shí)現(xiàn)。下面簡(jiǎn)單介紹5種內(nèi)置的線程池。

1)SimpleAsyncTaskExecutor:它不會(huì)復(fù)用線程,每次調(diào)用都是啟動(dòng)一個(gè)新線程。

2)ConcurrentTaskExecutor:它是Java API中Executor實(shí)例的適配器。

3)ThreadPoolTaskExecutor:這個(gè)線程池是最常用的。它公開了用于配置的bean屬性,并將它包裝在TaskExecutor中。

4)WorkManagerTaskExecutor:它基于CommonJ WorkManager來(lái)實(shí)現(xiàn)的,并且是在Spring上下文中的WebLogic或WebSphere中設(shè)置CommonJ線程池的工具類。

5)DefaultManagedTaskExecutor:主要用于支持JSR-236兼容的運(yùn)行時(shí)環(huán)境,它是使用JNDI獲得ManagedExecutorService,作為CommonJ WorkManager的替代方案。

通常情況下,ThreadPoolTaskExecuto最為常用,只要當(dāng)ThreadPoolTaskExecutor不能滿足需求時(shí),可以使用ConcurrentTaskExecutor。如果在代碼中聲明了多個(gè)線程池,Spring會(huì)默認(rèn)按照以下搜索順序來(lái)調(diào)用線程池:

第一步,檢查上下文中的唯一TaskExecutor Bean。

第二步,檢查名為“ taskExecutor”的Executor Bean。

第三步,以上都無(wú)法無(wú)法處理,就會(huì)使用SimpleAsyncTaskExecutor來(lái)執(zhí)行。

3、自定義線程池方式

可以通過(guò)實(shí)現(xiàn)AsyncConfigurer接口或者直接繼承AsyncConfigurerSupport類來(lái)自定義線程池。但是非完全托管的Bean和完全托管的Bean實(shí)現(xiàn)方式有點(diǎn)小差異。

首先,來(lái)看非完全托管的Spring Bean,實(shí)現(xiàn)方式如代碼所示:

@Configuration @EnableAsync public class AppConfig implements AsyncConfigurer { @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(7); executor.setMaxPoolSize(42); executor.setQueueCapacity(11); executor.setThreadNamePrefix("MyExecutor-"); executor.initialize();//手動(dòng)初始化 return executor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new MyAsyncUncaughtExceptionHandler(); } }

在這段代碼中,ThreadPoolTaskExecutor不是完全托管的Spring bean。

然后,來(lái)看完全托管的Spring Bean,實(shí)現(xiàn)方式如代碼所示:

@Configuration @EnableAsync public class AppConfig implements AsyncConfigurer { @Bean @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(7); executor.setMaxPoolSize(42); executor.setQueueCapacity(11); executor.setThreadNamePrefix("MyExecutor-"); //executor.initialize();//不用手動(dòng)調(diào)用 return executor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new MyAsyncUncaughtExceptionHandler(); } }

只要在異步方法上添加@Bean注解,不需要手動(dòng)調(diào)用線程池的initialize()方法,在Bean在初始化之后會(huì)自動(dòng)調(diào)用。需要注意的是,在同級(jí)類中直接調(diào)用異步方法無(wú)法實(shí)現(xiàn)異步。

以上就是我對(duì)Spring實(shí)現(xiàn)異步調(diào)用的理解。


網(wǎng)頁(yè)題目:快速搞懂Spring中實(shí)現(xiàn)異步調(diào)用的方式有哪些?
網(wǎng)頁(yè)路徑:http://m.5511xx.com/article/djhicij.html