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

Spring線程池的配置及使用ThreadPoolTaskExecutor過程

 更新時(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提供的線程池,通過配置參數(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)用者所在的線程來執(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è)陂_發(fā)中經(jīng)常會(huì)用到Java提供的工具類創(chuàng)建線程池,F(xiàn)ixedThreadPool就是其中之一,但在使用中要注意這個(gè)線程池一旦開啟會(huì)引起內(nè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


上面兩圖是截圖出來的源碼,重點(diǎn)就在這個(gè)new出來的隊(duì)列,通常稱為無界隊(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中無法讀寫byte[]類問題的解決辦法

    Mybatis在sqlite中無法讀寫byte[]類問題的解決辦法

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

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

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

    HashMap插入相同key問題

    這篇文章主要介紹了HashMap插入相同key問題,具有很好的參考價(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通過Wrapper動(dòng)態(tài)生成SQL片段,支持XML中${ew.customSqlSegment}引用,結(jié)合Lambda表達(dá)式避免硬編碼,適用于動(dòng)態(tài)查詢、邏輯刪除等場景,提升代碼可維護(hù)性與靈活性,本文給大家介紹MyBatis-Plus中的動(dòng)態(tài)SQL片段(sqlSegment)講解,感興趣的朋友一起看看吧
    2025-06-06
  • MyBatis-Plus常見面試題和答案大全

    MyBatis-Plus常見面試題和答案大全

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

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

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

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

    這篇文章主要介紹了Windows下apache ant安裝、環(huán)境變量配置教程,ANT的安裝很簡單,本文同時(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語言,支持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的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論

盐边县| 石楼县| 富顺县| 靖远县| 会昌县| 泰兴市| 元朗区| 海原县| 丰都县| 尖扎县| 田阳县| 巴林右旗| 白城市| 黄大仙区| 义马市| 福海县| 东辽县| 临沂市| 凭祥市| 和硕县| 诏安县| 红安县| 合川市| 都江堰市| 洛浦县| 延庆县| 安徽省| 岗巴县| 五峰| 柯坪县| 南岸区| 周宁县| 溧阳市| 新营市| 金平| 阳春市| 襄樊市| 康保县| 苗栗市| 高州市| 临漳县|