中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站建設(shè)制作公司地址發(fā)軟文是什么意思

網(wǎng)站建設(shè)制作公司地址,發(fā)軟文是什么意思,東莞虎門鎮(zhèn),wordpress博客文章美化背景 在需求開發(fā)過程中,為了提升效率,很容易就會遇到需要使用多線程的場景。這個時候一般都會選擇建一個線程池去專門用來進行某一類動作,這種任務(wù)到來的時候往往伴隨著大量的線程被創(chuàng)建調(diào)用。而還有另外一種場景是整個任務(wù)的執(zhí)行耗時比較長…

背景

在需求開發(fā)過程中,為了提升效率,很容易就會遇到需要使用多線程的場景。這個時候一般都會選擇建一個線程池去專門用來進行某一類動作,這種任務(wù)到來的時候往往伴隨著大量的線程被創(chuàng)建調(diào)用。而還有另外一種場景是整個任務(wù)的執(zhí)行耗時比較長,但又不適合起多線程去運行,只能后臺起一個異步線程去慢慢跑。這個時候就需要一個公共的線程池。

可選方案

總體思想就是要有一個全局可用的線程池,可以用來執(zhí)行一些零散的任務(wù)。

方案一

自定義一個全局的線程池,需要異步操作的就調(diào)用。這種方法好處是實現(xiàn)簡單,并且調(diào)用起來也簡單,直接當(dāng)成一個方法就可以了。但需要同模塊項目(或者導(dǎo)入了模塊)才能使用。

方案二

使用Spring自帶的注解@Async實現(xiàn)異步。這種方法的好處是注解可以跨模塊使用,因為線程池對象會被注入容器,整個服務(wù)共用。而且更大的好處是使用簡單,使用者只需要給所需異步操作的方法加上@Async(“beanName”)即可。其中beanName是指注入容器的對象的名稱,也可以不加參數(shù),不加參數(shù)代表使用默認(rèn)線程池。

考慮到便捷性和新手友好性,選擇了方案二。

實現(xiàn)(注意看我的調(diào)用的結(jié)構(gòu),可以避免循環(huán)依賴)

controller->async->service √
controller->service->async->service ×,這樣會出現(xiàn)循環(huán)依賴

1.創(chuàng)建線程池配置類

/**
*	必須加上@EnableAsync注解
*/
@EnableAsync
@Configuration
public class TaskPoolConfig {/***	可以多創(chuàng)建幾個bean注入容器,根據(jù)bean不同用來執(zhí)行不同類型的任務(wù)*/@Bean("taskExecutor")public Executor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();//核心線程池大小executor.setCorePoolSize(16);//最大線程數(shù)executor.setMaxPoolSize(20);//配置隊列容量,默認(rèn)值為Integer.MAX_VALUEexecutor.setQueueCapacity(99999);//活躍時間executor.setKeepAliveSeconds(60);//線程名字前綴executor.setThreadNamePrefix("asyncServiceExecutor -");//設(shè)置此執(zhí)行程序應(yīng)該在關(guān)閉時阻止的最大秒數(shù),以便在容器的其余部分繼續(xù)關(guān)閉之前等待剩余的任務(wù)完成他們的執(zhí)行executor.setAwaitTerminationSeconds(60);//等待所有的任務(wù)結(jié)束后再關(guān)閉線程池executor.setWaitForTasksToCompleteOnShutdown(true);return executor;}@Bean("taskExecutor2")public Executor taskExecutor2() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();//核心線程池大小executor.setCorePoolSize(16);//最大線程數(shù)executor.setMaxPoolSize(20);//配置隊列容量,默認(rèn)值為Integer.MAX_VALUEexecutor.setQueueCapacity(99999);//活躍時間executor.setKeepAliveSeconds(60);//線程名字前綴executor.setThreadNamePrefix("asyncServiceExecutor -");//設(shè)置此執(zhí)行程序應(yīng)該在關(guān)閉時阻止的最大秒數(shù),以便在容器的其余部分繼續(xù)關(guān)閉之前等待剩余的任務(wù)完成他們的執(zhí)行executor.setAwaitTerminationSeconds(60);//等待所有的任務(wù)結(jié)束后再關(guān)閉線程池executor.setWaitForTasksToCompleteOnShutdown(true);return executor;}
}

2.使用異步

異步類:

public interface AsyncService {void test();
}
@Slf4j
@Service
public class AsyncServiceImpl implements AsyncService {@Autowiredprivate TestService testService;//這里的參數(shù)是只bean的名稱,不填則使用默認(rèn)的線程池。如果這個注解放在類上,代表這個類里面的全部方法都走異步@Async("taskExecutor")void test(){testService.todo();}@Async("taskExecutor2")void test2(){testService.todo2();}
}

業(yè)務(wù)類:

public interface TestService {void todo();void todo2();
}
@Slf4j
@Service
public class TestServiceImpl implements TestService{void todo(){LocalDateTime dateTime=LocalDateTime.now();log.info("已經(jīng)進入異步方法,現(xiàn)在時間:{},睡三秒",dateTime);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}dateTime=LocalDateTime.now();log.info("三秒后時間為:{}",dateTime);}void todo2(){}
}

測試類:

@Slf4j
@RestController
public class TestController {@Autowiredprivate AsyncService asyncService;@RequestMapping("/test")public void test(){asyncService.test();LocalDateTime dateTime=LocalDateTime.now();log.info("這是主線程,現(xiàn)在時間為:{}",dateTime);}
}

結(jié)果:成功
在這里插入圖片描述

坑點

1.異步失效

如果一個類里面有兩個方法A、B,方法B添加了異步注解,方法A調(diào)用方法B,異步不會生效。
查了一下,好像是因為異步注解的實現(xiàn)用到了動態(tài)代理,而一個類內(nèi)部方法的調(diào)用不會走代理,也就沒法實現(xiàn)異步。
因此,建議把異步都放在一個專門的異步類里面,這個類的方法只用來實現(xiàn)異步,方法內(nèi)部再去調(diào)用真正的業(yè)務(wù)邏輯方法。

2.循環(huán)依賴

正常來說,A類中注入B類對象,B類中再注入A類對象。這種情況在代碼中并不會發(fā)生循環(huán)依賴。而在異步注解中會出現(xiàn)循環(huán)依賴,因為異步注解底層實現(xiàn)用的是動態(tài)代理。

http://www.risenshineclean.com/news/52291.html

相關(guān)文章:

  • 網(wǎng)站開發(fā)目的騰訊企點賬戶中心
  • 珠海高端網(wǎng)站制作公司怎么做網(wǎng)頁設(shè)計的頁面
  • 溫州網(wǎng)站推廣站建設(shè)河北seo診斷培訓(xùn)
  • 網(wǎng)站是由哪些組成電商平臺推廣怎么做
  • 騰訊風(fēng)鈴做的網(wǎng)站有期限嗎優(yōu)化seo系統(tǒng)
  • 南寧最高端網(wǎng)站建設(shè)如何搭建網(wǎng)站平臺
  • 網(wǎng)頁平面設(shè)計招聘seo優(yōu)化服務(wù)商
  • 樂清站在哪qq排名優(yōu)化網(wǎng)站
  • 西鄉(xiāng)做網(wǎng)站公司濟寧百度推廣電話
  • 在家做兼職的網(wǎng)站網(wǎng)絡(luò)營銷的方法有哪些
  • 訂閱號做影視網(wǎng)站網(wǎng)頁設(shè)計與制作步驟
  • 家居網(wǎng)站建設(shè)全網(wǎng)營銷貴陽seo網(wǎng)站管理
  • 論壇網(wǎng)站地圖怎么做指定關(guān)鍵詞seo報價
  • 網(wǎng)站反向鏈接廣告資源對接平臺
  • 房地產(chǎn)網(wǎng)站建設(shè)方案在線培訓(xùn)課程
  • 為企業(yè)做網(wǎng)站還有前途嗎app拉新
  • 手機導(dǎo)航網(wǎng)站模板百度手機助手網(wǎng)頁
  • 花生棒做網(wǎng)站關(guān)鍵詞
  • 美食網(wǎng)站設(shè)計目的寧波百度seo點擊軟件
  • 中國十大網(wǎng)絡(luò)安全龍頭seo基礎(chǔ)教程
  • 怎么查看網(wǎng)站是什么軟件做的全國疫情今天最新消息
  • 公司網(wǎng)站需要程序員做嗎廣告平臺有哪些
  • ??陔p語網(wǎng)站建設(shè)楚雄seo
  • 云南網(wǎng)站建設(shè)公司前十名鄭州企業(yè)網(wǎng)站優(yōu)化排名
  • wordpress安裝的模板文件在哪廣西seo
  • 電商網(wǎng)站建設(shè)課程設(shè)計實驗報告百度導(dǎo)航下載2022最新版
  • 做外匯新聞網(wǎng)站百度注冊頁面
  • 手機網(wǎng)站模板免費模板南昌seo推廣公司
  • 導(dǎo)航網(wǎng)站怎么做首頁優(yōu)化公司
  • 東阿做網(wǎng)站網(wǎng)絡(luò)廣告宣傳怎么做