日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談Java中spring 線程異步執行

瀏覽:59日期:2022-08-28 14:25:14

多線程并發處理起來通常比較麻煩,如果你使用spring容器來管理業務bean,事情就好辦了多了。spring封裝了Java的多線程的實現,你只需要關注于并發事物的流程以及一些并發負載量等特性,具體來說如何使用spring來處理并發事務:

1.了解 TaskExecutor接口

Spring的TaskExecutor接口等同于java.util.concurrent.Executor接口。 實際上,它存在的主要原因是為了在使用線程池的時候,將對Java5的依賴抽象出來。 這個接口只有一個方法execute(Runnable task),它根據線程池的語義和配置,來接受一個執行任務。最初創建TaskExecutor是為了在需要時給其他Spring組件提供一個線程池的抽象。 例如ApplicationEventMulticaster組件、JMS的 AbstractMessageListenerContainer和對Quartz的整合都使用了TaskExecutor抽象來提供線程池。 當然,如果你的bean需要線程池行為,你也可以使用這個抽象層。

2. TaskExecutor接口的實現類

(1)SimpleAsyncTaskExecutor 類

這個實現不重用任何線程,或者說它每次調用都啟動一個新線程。但是,它還是支持對并發總數設限,當超過線程并發總數限制時,阻塞新的調用,直到有位置被釋放。如果你需要真正的池,請繼續往下看。

(2)SyncTaskExecutor類

這個實現不會異步執行。相反,每次調用都在發起調用的線程中執行。它的主要用處是在不需要多線程的時候,比如簡單的test case。

(3)ConcurrentTaskExecutor 類

這個實現是對Java 5 java.util.concurrent.Executor類的包裝。有另一個備選, ThreadPoolTaskExecutor類,它暴露了Executor的配置參數作為bean屬性。很少需要使用ConcurrentTaskExecutor, 但是如果ThreadPoolTaskExecutor不敷所需,ConcurrentTaskExecutor是另外一個備選。

(4)SimpleThreadPoolTaskExecutor 類

這個實現實際上是Quartz的SimpleThreadPool類的子類,它會監聽Spring的生命周期回調。當你有線程池,需要在Quartz和非Quartz組件中共用時,這是它的典型用處。

(5)ThreadPoolTaskExecutor 類

它不支持任何對java.util.concurrent包的替換或者下行移植。Doug Lea和Dawid Kurzyniec對java.util.concurrent的實現都采用了不同的包結構,導致它們無法正確運行。 這個實現只能在Java 5環境中使用,但是卻是這個環境中最常用的。它暴露的bean properties可以用來配置一個java.util.concurrent.ThreadPoolExecutor,把它包裝到一個TaskExecutor中。如果你需要更加先進的類,比如ScheduledThreadPoolExecutor,我們建議你使用ConcurrentTaskExecutor來替代。

(6)TimerTaskExecutor類

這個實現使用一個TimerTask作為其背后的實現。它和SyncTaskExecutor的不同在于,方法調用是在一個獨立的線程中進行的,雖然在那個線程中是同步的。

(7)WorkManagerTaskExecutor類

這個實現使用了CommonJ WorkManager作為其底層實現,是在Spring context中配置CommonJ WorkManager應用的最重要的類。和SimpleThreadPoolTaskExecutor類似,這個類實現了WorkManager接口,因此可以直接作為WorkManager使用。

案例

注冊TaskExecutor

@Configurationpublic class WebMvcConfigurerAdpter extends AbstractWebMvcConfigurerAdpter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); WafJsonMapper.getMapper().enable(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS); } @Bean public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(10); return executor; }}

使用:

@Servicepublic class TaskService { @Autowired private TaskExecutor executor; public void execute() { executor.execute(new Runnable() { @Override public void run() { for (int i = 0; i < 10; i++) { try { Thread.sleep(1000); System.out.println('task running ...'); } catch (Exception e) { } } } }); }}

@RestController@RequestMapping(value = '/v0.1')public class TaskController { @Autowired private TaskService taskService; @RequestMapping() public Object execute() { taskService.execute(); Map res = new HashMap(); res.put('result', 'success'); return res; }}

程序不會等到10個線程都跑完才返回結果,不是阻塞程序,返回結果后,線程仍然在執行。

案例:

ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();//線程池所使用的緩沖隊列poolTaskExecutor.setQueueCapacity(200);//線程池維護線程的最少數量poolTaskExecutor.setCorePoolSize(5);//線程池維護線程的最大數量poolTaskExecutor.setMaxPoolSize(1000);//線程池維護線程所允許的空閑時間poolTaskExecutor.setKeepAliveSeconds(30000);poolTaskExecutor.initialize();

<!-- 配置線程池 --><bean > <!-- 線程池維護線程的最少數量 --><span style='white-space:pre'> </span><property name ='corePoolSize' value ='5' /> <!-- 線程池維護線程所允許的空閑時間 --><span style='white-space:pre'> </span><property name ='keepAliveSeconds' value ='30000' /> <!-- 線程池維護線程的最大數量 --><span style='white-space:pre'> </span><property name ='maxPoolSize' value ='1000' /> <!-- 線程池所使用的緩沖隊列 --><span style='white-space:pre'> </span><property name ='queueCapacity' value ='200' /></bean>

ApplicationContext ctx = new ClassPathXmlApplicationContext('applicationContext.xml');ThreadPoolTaskExecutor poolTaskExecutor = (ThreadPoolTaskExecutor)ctx.getBean('taskExecutor');Thread udpThread = new Thread(udp);poolTaskExecutor.execute(udpThread);獲取當前線程池活動的線程數:int count = poolTaskExecutor.getActiveCount();logger.debug('[x] - now threadpool active threads totalNum : ' +count);

配置解釋

當一個任務通過execute(Runnable)方法欲添加到線程池時:1、 如果此時線程池中的數量小于corePoolSize,即使線程池中的線程都處于空閑狀態,也要創建新的線程來處理被添加的任務。2、 如果此時線程池中的數量等于 corePoolSize,但是緩沖隊列 workQueue未滿,那么任務被放入緩沖隊列。3、如果此時線程池中的數量大于corePoolSize,緩沖隊列workQueue滿,并且線程池中的數量小于maximumPoolSize,建新的線程來處理被添加的任務。4、 如果此時線程池中的數量大于corePoolSize,緩沖隊列workQueue滿,并且線程池中的數量等于maximumPoolSize,那么通過 handler所指定的策略來處理此任務。也就是:處理任務的優先級為:核心線程corePoolSize、任務隊列workQueue、最大線程 maximumPoolSize,如果三者都滿了,使用handler處理被拒絕的任務。5、 當線程池中的線程數量大于 corePoolSize時,如果某線程空閑時間超過keepAliveTime,線程將被終止。這樣,線程池可以動態的調整池中的線程數。

到此這篇關于淺談spring 線程異步執行的文章就介紹到這了,更多相關spring 線程異步執行內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜欧美巨大性欧美巨大| 麻豆国产精品视频| 久久a爱视频| 日本午夜精品一区二区三区电影 | 久久裸体视频| 国产超碰精品| 国产欧洲在线| 欧美亚洲一区二区三区| 玖玖精品视频| 国产精品普通话对白| 国产专区一区| 午夜精品亚洲| 久久最新视频| 日本中文字幕一区二区| 69堂免费精品视频在线播放| 国产毛片精品久久| 久久久国产精品网站| 嫩草伊人久久精品少妇av杨幂| 国产精品红桃| 日韩一区自拍| 日韩视频二区| 日韩欧美美女在线观看| 日本视频一区二区| 亚洲ab电影| 美女在线视频一区| 日韩国产专区| 日韩一区欧美二区| 国产欧美视频在线| 日韩久久电影| 亚洲香蕉视频| 精品欧美视频| 亚洲一卡久久| 久久精品国产久精国产爱| 久久国产电影| 日韩av三区| 欧美一级精品| 欧美亚洲专区| 亚洲黄色影院| 日欧美一区二区| 日本不卡免费高清视频在线| 蜜桃传媒麻豆第一区在线观看| 国产精一区二区| 国产韩日影视精品| 嫩呦国产一区二区三区av| 国产精品丝袜xxxxxxx| 日韩成人免费| 日韩av一区二| 久久福利影视| 女生影院久久| 欧美xxxx性| 日韩精品免费观看视频| 久久精品播放| 国产一区二区三区日韩精品| 欧美日韩第一| 福利一区在线| 国产欧美日韩精品一区二区免费| 亚洲精品一区二区妖精| 国产一二在线播放| 老司机精品视频在线播放| 亚洲一二av| 久久久精品午夜少妇| 精品中文字幕一区二区三区四区| 亚洲精品福利| 综合激情在线| 丝袜国产日韩另类美女| 99在线|亚洲一区二区| 首页国产欧美日韩丝袜| 国产亚洲在线观看| 视频在线不卡免费观看| 欧美精品二区| 精品国产亚洲一区二区三区在线 | 欧美三区不卡| 成人精品国产亚洲| 精品视频91| 韩国久久久久久| 亚洲激情五月| 国产伦精品一区二区三区在线播放 | 麻豆高清免费国产一区| 国产精品高颜值在线观看| 最近国产精品视频| 国产高潮在线| 午夜在线一区二区| 欧美国产中文高清| 91精品国产调教在线观看| 亚洲精品无播放器在线播放| 欧美a一区二区| 欧美精品九九| 国产精品一区二区av交换| 久久香蕉国产| 青青草91久久久久久久久| 日本视频中文字幕一区二区三区| 性感美女一区二区在线观看| 国产亚洲精品v| 老牛国内精品亚洲成av人片 | 高清日韩欧美| 亚洲日产国产精品| 成人午夜亚洲| 亚洲欧美日本国产| 欧美三区四区| 免费在线观看一区| 亚洲免费播放| 国产精品专区免费| 日韩av一区二区在线影视| 久久久久国产精品一区三寸 | 色偷偷色偷偷色偷偷在线视频| 亚洲一区av| 国产h片在线观看| 亚洲人成精品久久久| 中文字幕一区久| 欧美视频一区| 亚洲精选久久| zzzwww在线看片免费| 国产日产一区| 中文日韩欧美| 久久国产小视频| 久久精品二区亚洲w码| 日韩综合一区二区三区| 九一成人免费视频| 国产精品一区二区99| 免费在线成人网| 欧美色图国产精品| 国产精品伦理久久久久久| 中文字幕亚洲精品乱码| 日韩亚洲精品在线| 在线观看精品| 精品欧美视频| 国产欧美91| 亚洲伊人精品酒店| 国产精品普通话对白| 久久九九国产| 国产一区二区三区黄网站| 欧美亚洲一级| 亚洲一级大片| 欧美中文日韩| 九九久久电影| 久久久久久黄| 伊人网在线播放| 精品国产aⅴ| 麻豆精品新av中文字幕| 国产欧美一区二区三区国产幕精品 | 日韩精彩视频在线观看| 免费黄色成人| 国产精品主播在线观看| 日韩精品视频网| 亚洲精品裸体| 亚洲中字黄色| 久久精品青草| 日韩欧美精品一区| 精品国产欧美| 久久一区国产| 国产精品蜜月aⅴ在线| 日韩在线观看一区二区三区| 午夜视频精品| 91九色精品| 欧美特黄a级高清免费大片a级| 日韩一区二区三区免费| 日韩av在线播放网址| 狠狠久久伊人| 91亚洲自偷观看高清| 久久久久黄色| 欧美国产小视频| 国产成人精品福利| 成人台湾亚洲精品一区二区 | 亚洲国产综合在线看不卡| 三上悠亚国产精品一区二区三区 | 天堂va欧美ⅴa亚洲va一国产| 亚洲三级网站| 欧美日本不卡高清| 国产精品啊v在线| 国产精品一区2区3区| 久久精品一区二区三区中文字幕| 欧美日韩一区二区三区在线电影| 青青国产91久久久久久| 国产精品国产三级在线观看| 久久中文字幕导航| 在线看片国产福利你懂的| 四虎884aa成人精品最新| 2023国产精品久久久精品双| 日韩一区二区久久| 石原莉奈在线亚洲三区| 五月亚洲婷婷 | 麻豆精品99| 精品久久99| 久久蜜桃精品| 日韩在线一区二区| 国产亚洲精品精品国产亚洲综合| 久久99青青| av在线日韩| 午夜在线精品偷拍| 亚洲一本视频| 欧美在线看片| 国产一区二区三区四区二区| 天堂日韩电影| 日韩精品欧美大片| 久久精品国产亚洲一区二区三区| 99热精品久久| 日本伊人午夜精品| 国产精品久久久久av蜜臀| 日本а中文在线天堂| 亚洲一区二区三区高清不卡|