最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring線程池的配置及使用ThreadPoolTaskExecutor過(guò)程

 更新時(shí)間:2026年03月30日 11:03:23   作者:Jason_520168  
本文主要介紹了Spring提供的線程池ThreadPoolTaskExecutor及其配置方式,以及FixedThreadPool線程池的使用注意事項(xiàng),同時(shí)強(qiáng)調(diào)了計(jì)數(shù)器的使用可以保證線程池執(zhí)行順序

一、ThreadPoolTaskExecutor是什么?

ThreadPoolTaskExecutor是Spring提供的線程池,通過(guò)配置參數(shù)初始化線程池,隨取隨用,不需要操作線程的創(chuàng)建和銷毀。

二、代碼實(shí)現(xiàn)

1.配置類ExecutorConfig

代碼如下(示例):

@Configuration
@EnableAsync
public class ExecutorConfig {

    private static final Logger logger = LoggerFactory.getLogger(ExecutorConfig.class);

    private int corePoolSize = 5;
    private int maxPoolSize = 10;
    private int queueCapacity = 99999;
    private String namePrefix = "async-service-";

    @Bean(name = "asyncServiceExecutor")
    public ThreadPoolTaskExecutor asyncServiceExecutor(){
        logger.info("start asyncServiceExecutor");
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //配置核心線程數(shù)
        executor.setCorePoolSize(corePoolSize);
        //配置最大線程數(shù)
        executor.setMaxPoolSize(maxPoolSize);
        //配置隊(duì)列大小
        executor.setQueueCapacity(queueCapacity);
        //配置線程池中的線程的名稱前綴
        executor.setThreadNamePrefix(namePrefix);

        // rejection-policy: 當(dāng)pool已經(jīng)達(dá)到max size的時(shí)候,如何處理新任務(wù)
        // CALLER_RUNS: 不在新線程中執(zhí)行任務(wù),而是有調(diào)用者所在的線程來(lái)執(zhí)行
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //執(zhí)行初始化
        executor.initialize();
        return executor;
    }
}

2.引入使用

代碼如下(示例):

    @Resource(name = "asyncServiceExecutor")
    private ThreadPoolTaskExecutor executor;

	//定義計(jì)數(shù)器
	final CountDownLatch countDownLatch=new CountDownLatch(list.size());
	executor.execute(()-> {
                    try {
						//Do something
                    } catch (Exception e) {
                        log.error(e.getMessage());
                    } finally {
                        log.info(Thread.currentThread().getName() + "執(zhí)行完成");
                        //計(jì)數(shù)器減一
                        countDownLatch.countDown();
                    }
                });

            try {
                countDownLatch.await();
                executor.shutdownNow();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //Do something

三、FixedThreadPool線程池

我們?cè)陂_(kāi)發(fā)中經(jīng)常會(huì)用到Java提供的工具類創(chuàng)建線程池,F(xiàn)ixedThreadPool就是其中之一,但在使用中要注意這個(gè)線程池一旦開(kāi)啟會(huì)引起內(nèi)存飆升的問(wèn)題,下面我們來(lái)看下源碼。

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
//定義計(jì)數(shù)器
	final CountDownLatch countDownLatch=new CountDownLatch(list.size());
	fixedThreadPool.execute(()-> {
                    try {
						//Do something
                    } catch (Exception e) {
                        log.error(e.getMessage());
                    } finally {
                        log.info(Thread.currentThread().getName() + "執(zhí)行完成");
                        //計(jì)數(shù)器減一
                        countDownLatch.countDown();
                    }
                });

            try {
                countDownLatch.await();
                fixedThreadPool.shutdownNow();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //Do something


上面兩圖是截圖出來(lái)的源碼,重點(diǎn)就在這個(gè)new出來(lái)的隊(duì)列,通常稱為無(wú)界隊(duì)列,因?yàn)檫@個(gè)隊(duì)列默認(rèn)大小是Interger.MAX_VALUE,所以在線程池創(chuàng)建的一瞬間內(nèi)存就會(huì)飆升,直到所有線程執(zhí)行完畢,關(guān)閉線程池,才會(huì)釋放內(nèi)存

總結(jié)

注意:

  • 計(jì)數(shù)器的定義是為了保證:線程池全部執(zhí)行完for循環(huán)中的內(nèi)容,再執(zhí)行后續(xù)的內(nèi)容。
  • 如果不需要保證執(zhí)行順序,可以不使用計(jì)數(shù)器。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis在sqlite中無(wú)法讀寫(xiě)byte[]類問(wèn)題的解決辦法

    Mybatis在sqlite中無(wú)法讀寫(xiě)byte[]類問(wèn)題的解決辦法

    這篇文章主要給大家介紹了關(guān)于Mybatis在sqlite中無(wú)法讀寫(xiě)byte[]類問(wèn)題的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java 裝箱與拆箱詳解及實(shí)例代碼

    Java 裝箱與拆箱詳解及實(shí)例代碼

    這篇文章主要介紹了Java 裝箱與拆箱詳解及實(shí)例代碼的相關(guān)資料,這里對(duì)java 的裝箱及拆箱進(jìn)行了基本概念詳解及簡(jiǎn)單使用,需要的朋友可以參考下
    2017-01-01
  • HashMap插入相同key問(wèn)題

    HashMap插入相同key問(wèn)題

    這篇文章主要介紹了HashMap插入相同key問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • MyBatis-Plus 中 的動(dòng)態(tài)SQL 片段(sqlSegment)詳解

    MyBatis-Plus 中 的動(dòng)態(tài)SQL 片段(sqlSegment)詳解

    MyBatis-Plus的sqlSegment通過(guò)Wrapper動(dòng)態(tài)生成SQL片段,支持XML中${ew.customSqlSegment}引用,結(jié)合Lambda表達(dá)式避免硬編碼,適用于動(dòng)態(tài)查詢、邏輯刪除等場(chǎng)景,提升代碼可維護(hù)性與靈活性,本文給大家介紹MyBatis-Plus中的動(dòng)態(tài)SQL片段(sqlSegment)講解,感興趣的朋友一起看看吧
    2025-06-06
  • MyBatis-Plus常見(jiàn)面試題和答案大全

    MyBatis-Plus常見(jiàn)面試題和答案大全

    Mybatis-Plus是一個(gè)基于Mybatis的增強(qiáng)工具,它簡(jiǎn)化了Mybatis的開(kāi)發(fā)流程,提供了許多實(shí)用的功能,如自動(dòng)生成代碼、分頁(yè)查詢、條件構(gòu)造器、性能分析等,這篇文章主要給大家介紹了關(guān)于MyBatis-Plus常見(jiàn)面試題和答案的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Java雇員管理小項(xiàng)目

    Java雇員管理小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了Java雇員管理小項(xiàng)目,理解面向?qū)ο缶幊?,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Windows下apache ant安裝、環(huán)境變量配置教程

    Windows下apache ant安裝、環(huán)境變量配置教程

    這篇文章主要介紹了Windows下apache ant安裝、環(huán)境變量配置教程,ANT的安裝很簡(jiǎn)單,本文同時(shí)講解了驗(yàn)證安裝是否成功的方法和使用方法實(shí)例,需要的朋友可以參考下
    2015-06-06
  • 使用java.util.Timer實(shí)現(xiàn)任務(wù)調(diào)度

    使用java.util.Timer實(shí)現(xiàn)任務(wù)調(diào)度

    這篇文章主要為大家詳細(xì)介紹了使用java.util.Timer實(shí)現(xiàn)任務(wù)調(diào)度,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • springboot+camunda實(shí)現(xiàn)工作流的流程分析

    springboot+camunda實(shí)現(xiàn)工作流的流程分析

    Camunda是基于Java語(yǔ)言,支持BPMN標(biāo)準(zhǔn)的工作流和流程自動(dòng)化框架,并且還支持CMMN規(guī)范,DMN規(guī)范,本文給大家介紹springboot+camunda實(shí)現(xiàn)工作流的流程分析,感興趣的朋友一起看看吧
    2021-12-12
  • SpringBoot 單元測(cè)試JUnit的使用詳解

    SpringBoot 單元測(cè)試JUnit的使用詳解

    這篇文章主要介紹了SpringBoot 單元測(cè)試JUnit的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論

和龙市| 罗甸县| 甘肃省| 威海市| 蓬溪县| 安顺市| 丽江市| 扎囊县| 富源县| 八宿县| 揭阳市| 太和县| 中西区| 丹巴县| 清新县| 杭锦后旗| 大洼县| 吐鲁番市| 万盛区| 调兵山市| 略阳县| 始兴县| 大名县| 惠水县| 兴安县| 长白| 沙坪坝区| 寿宁县| 康定县| 安新县| 广丰县| 临潭县| 丹阳市| 常德市| 乃东县| 抚顺县| 婺源县| 东安县| 弥勒县| 北京市| 泗洪县|