亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java countDownLatch如何實(shí)現(xiàn)多線程任務(wù)阻塞等待

瀏覽:39日期:2022-08-22 16:58:58

我這里需要通過多線程去處理數(shù)據(jù),然后在所有數(shù)據(jù)都處理完成后再往下執(zhí)行。這里就用到了CountDownLatch。把countdownlatch作為參數(shù)傳入到每個(gè)線程類里,在線程中處理完數(shù)據(jù)后執(zhí)行countdown方法。在所有countdownlatch歸零后,其await方法結(jié)束阻塞狀態(tài)而往下執(zhí)行。

具體代碼如下:

將多線程任務(wù)提交線程池

@Bean(name = 'ggnews_executor')public Executor postExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(1);executor.setMaxPoolSize(1);executor.setQueueCapacity(1);executor.setKeepAliveSeconds(120);executor.setThreadNamePrefix('executor-');executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());return executor;}//通過定時(shí)任務(wù)調(diào)用的fetch方法,為了避免定時(shí)任務(wù)在多次執(zhí)行中失效,通異步指定線程池的方式進(jìn)行調(diào)用@Async('ggnews_executor')public void fetch() {if(fetchFlag.getAndSet(false)) {List<FetchTag> tags = fetchTagService.selectFetchTagList(fetchTag);CountDownLatch downLatch = new CountDownLatch(tags.size());for (FetchTag tag : tags) {FetchTag tagNew;try {tagNew =(FetchTag) tag.clone();} catch (Throwable e) {log.error('',e);continue;}//作為參數(shù)將CountDownLatch傳入InnerRunner innerRunner = new InnerRunner(downLatch, tagNew);executor.execute(innerRunner);}try {//等待線程執(zhí)行完畢,如果十分鐘后還沒結(jié)束也會(huì)停止阻塞狀態(tài)downLatch.await(10,TimeUnit.MINUTES);fetchFlag.getAndSet(true);} catch (Throwable e) {log.error('fetch()方法發(fā)生錯(cuò)誤:{}', e);fetchFlag.getAndSet(true);//e.printStackTrace();} finally {fetchFlag.getAndSet(true);}} else {log.info('=======上次抓取尚未結(jié)束=========');}}

InnerRunner為要執(zhí)行具體任務(wù)的線程類

private class InnerRunner implements Runnable {private CountDownLatch downLatch;private FetchTag tag;private InnerRunner(CountDownLatch downLatch, FetchTag tag) {this.downLatch = downLatch;this.tag = tag;}@Overridepublic void run() { //將countDown方法移入到具體方法中的finally塊中,以保證即使在拋出異常的情況下也算執(zhí)行了此次任務(wù),countdown會(huì)被執(zhí)行fetchGG(tag.getTag(), downLatch);//downLatch.countDown();this.tag = null;}}

private static final String GOOGLE_URL_IN = 'https://news.google.com/rss/search?hl=hi&gl=IN&ceid=IN:hi&q=';public void fetchGG(String tag, CountDownLatch downLatch) {try {Document document = Jsoup.parse(new URL(GOOGLE_URL_IN + URLEncoder.encode(''' + tag + ''', 'utf-8')), 30000);Elements elements = document.getElementsByTag('item');int rank = 1;for (Element element : elements) {String sourceTitle = element.getElementsByTag('title').get(0).text();log.info('source title:' + sourceTitle);}} catch (Throwable e) {log.info('fetch google url error', e);} finally { //肯定會(huì)被執(zhí)行downLatch.countDown();}}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产亚洲精品成人久久网站 | 伊甸园精品视频网站 | 优女视频免费观看 | 亚洲已满18点击进入在线观看 | 国产又色又爽黄的网站免费 | 在线观看麻豆视频 | 激情毛片视频在线播放 | 免费国产成人 | 久久精品国产一区二区三区不卡 | 在线观看网站国产 | 久久天天躁狠狠躁夜夜爽蜜月 | 无遮挡啪啪成人免费网站 | 亚洲欧美小说色综合小 | 一级做片爱性视频免费 | 亚洲系列_1页_mmyy11 | 亚洲黄色三级网站 | 久久鸭综合久久国产 | 中国一及黄色片 | 在线欧美精品一区二区三区 | 亚洲图片综合区另类图片 | 久久综合精品国产一区二区三区无 | 最新的国产成人精品2022 | 亚洲国产精久久久久久久春色 | 欧美精品亚洲网站 | 免费在线播放黄色 | 特别毛片 | 亚洲呦呦系列视频 | 天天综合色天天桴色 | 一本到不卡 | 精品视频专区 | 国产精品在线观看 | 三级全黄在线观看www桃花 | 国产h视频在线 | 亚洲色图首页 | 亚洲欧美久久久久久久久久爽网站 | a级影院| 免费三片在线观看网站 | 中文字幕一区精品欧美 | 久草热线视频 | 欧美国产精品一区二区免费 | 久久精彩视频 |