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

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

淺談Java中spring 線程異步執行

瀏覽:64日期: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久久,三上悠亚国产精品一区二区三区
久久www成人_看片免费不卡| 精品伊人久久久| 久久久久国产精品一区三寸| 日本精品影院| 欧美日韩国产高清电影| 午夜一区在线| 97成人超碰| 国产一区二区久久久久| 天堂中文av在线资源库| 亚洲激情中文在线| 日韩在线观看中文字幕| 欧美激情aⅴ一区二区三区| 亚洲最新无码中文字幕久久| 日韩国产在线| 午夜宅男久久久| 天使萌一区二区三区免费观看| 免费在线欧美视频| 国产精品久久| 99久久精品网| 日韩精彩视频在线观看| 中文字幕在线免费观看视频| 日韩一区精品视频| 老司机精品视频在线播放| 久久一区二区三区喷水| 亚洲精一区二区三区| 精品丝袜久久| 蜜臀a∨国产成人精品| 久久久久黄色| 久久亚洲风情| 9999国产精品| 免费av一区二区三区四区| 亚洲最新av| 黑森林国产精品av| 中文在线日韩| 特黄毛片在线观看| 亚洲婷婷丁香| 日韩av福利| 欧美私人啪啪vps| 欧美精品一区二区久久| 国产精品伦一区二区| 日韩一区二区免费看| 免费在线播放第一区高清av| 欧美日韩国产免费观看| 精品日本视频| 亚洲精品国模| 香蕉视频亚洲一级| 日韩精品一区二区三区中文| 中文在线а√天堂| 日韩avvvv在线播放| 啪啪国产精品| 国产伦理久久久久久妇女| 亚洲欧美伊人| 中文字幕人成乱码在线观看| 国产精选久久| 日韩美女精品| 国产一区白浆| 国产一区二区三区视频在线| 欧美一级一区| 蜜臀久久久99精品久久久久久| 日韩在线观看一区| 久久国产精品免费精品3p | 久久久国产亚洲精品| 国产欧美自拍| 免费成人av在线播放| 五月天综合网站| 久久精品一区二区不卡| 高清精品久久| 久久三级中文| 国产精品久久久久久久免费软件| 免费在线观看视频一区| 日韩午夜免费| 今天的高清视频免费播放成人| 日韩1区在线| 精品网站999| 免费观看亚洲天堂| 免费在线观看一区| 国产精品久久久久久久久久齐齐| 欧美日韩一区二区三区不卡视频 | 麻豆视频一区二区| 欧美亚洲综合视频| 911亚洲精品| 97久久中文字幕| 四虎在线精品| 婷婷综合成人| 91免费精品国偷自产在线在线| 日韩欧美2区| 久久精品 人人爱| 国产精品一区高清| 欧美激情日韩| 精品国产精品国产偷麻豆| 欧美成a人片免费观看久久五月天| 日韩不卡一二三区| 国产精品嫩模av在线| 久久xxx视频| 粉嫩av一区二区三区四区五区| 精品免费视频| 日韩精品诱惑一区?区三区| 国产黄大片在线观看| 日韩国产激情| 亚洲天堂久久| 在线观看亚洲精品福利片| 亚洲精一区二区三区| 日本va欧美va精品发布| 久久99性xxx老妇胖精品| 国产成人免费| 久久精品国内一区二区三区水蜜桃| 日韩精品免费一区二区在线观看 | 91久久久精品国产| 热久久免费视频| 国产无遮挡裸体免费久久| 国产精品久久久久毛片大屁完整版 | 国产成人1区| 久久国产小视频| 亚洲欧美日本国产专区一区| 深夜福利一区| 久久99久久人婷婷精品综合| 欧美国产一级| 九九在线精品| 日本国产欧美| 97视频热人人精品免费| 一本一道久久a久久精品蜜桃| 蜜臀av在线播放一区二区三区| 日韩欧美激情| 国产不卡人人| 老色鬼久久亚洲一区二区| 国产乱码精品| 99久久精品国产亚洲精品| 亚洲影院天堂中文av色| 久久久久伊人| 国产亚洲一区在线| 精品亚洲免a| 久久亚洲影院| 久久精品二区亚洲w码| 激情欧美一区二区三区| 欧美亚洲三区| 亚洲国产影院| 国产福利一区二区精品秒拍| 亚洲国产专区校园欧美| 日韩av三区| 久久久水蜜桃av免费网站| 日本综合视频| 亚洲韩日在线| 久久99久久人婷婷精品综合| 99在线|亚洲一区二区| 久久久精品区| 蜜桃一区二区三区在线观看| 97精品视频在线看| 日韩中文字幕一区二区高清99| 天堂√中文最新版在线| 91福利精品在线观看| 香蕉国产精品| 久久久久伊人| 亚洲综合国产| 日本激情一区| 国产日产一区| 蜜桃久久久久久| 亚洲国内精品| 国内精品亚洲| 日本精品一区二区三区在线观看视频| 婷婷精品视频| a天堂资源在线| 国产精品v一区二区三区| 国产亚洲毛片| 日韩欧美三级| 国模精品一区| 欧美久久久网站| 亚洲视频电影在线| 99精品在线免费在线观看| 久久69成人| 国产精品日韩精品中文字幕| 亚洲伊人精品酒店| 尤物网精品视频| 色婷婷久久久| 国产精品99一区二区三区| 91成人在线网站| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲专区在线| av一区二区高清| 日韩精品久久久久久久电影99爱| 91成人福利| 深夜福利亚洲| 亚洲日本三级| 日韩制服丝袜av| 国产精品普通话对白| 免费欧美一区| 久久视频国产| 欧美日韩水蜜桃| 久久久777| 久久激情婷婷| 欧美色图一区| 精品日韩毛片| www在线观看黄色| 福利片在线一区二区| 91精品啪在线观看国产爱臀| 欧美日韩中文字幕一区二区三区| 欧美aa在线视频| 国产极品一区| 久久精品一区二区三区中文字幕| 免费亚洲一区| 欧美激情另类|