線程池ThreadPoolTaskExecutor 配置

參數(shù)說(shuō)明:
corePoolSize:線程池維護(hù)線程最小數(shù)量
maxPoolSize:線程池維護(hù)線程最大數(shù)量
keepAliveSeconds:(maxPoolSize-corePoolSize)部分線程空閑最大存活時(shí)間
queueCapacity:阻塞任務(wù)隊(duì)列
AllowCoreThreadTimeOut:設(shè)置為true的話,keepAliveSeconds參數(shù)設(shè)置的有效時(shí)間對(duì)corePoolSize線程也有效
RejectedExecutionHandler:當(dāng)提交任務(wù)數(shù)超過(guò)maxmumPoolSize+workQueue之和時(shí),任務(wù)會(huì)交給RejectedExecutionHandler來(lái)處理

線程創(chuàng)建流程:
1.當(dāng)線程數(shù)量小于corePoolSize時(shí),創(chuàng)建線程,不管線程是不是閑置的
2.當(dāng)線程數(shù)量大于等于corePoolSize時(shí),把任務(wù)放到queueCapacity隊(duì)列
3.當(dāng)queueCapacity滿了,就創(chuàng)建新的線程來(lái)執(zhí)行
4.當(dāng)線程數(shù)量大于等于maxPoolSize時(shí),根據(jù)RejectedExecutionHandler設(shè)置的策略來(lái)處理新加入的任務(wù)

spring.task.pool.corePoolSize=5
spring.task.pool.maxPoolSize=12
spring.task.pool.keepAliveSeconds=100
spring.task.pool.queueCapacity=40
@RequestMapping("/bigData")
    public String  bigData(){
        Long start = System.currentTimeMillis();
        logger.info("big data start..");
        for(int i=1;i<500;i++){
            final int num = i;
            taskExecutor.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(1000*6);
                        logger.info(Thread.currentThread().getName()+"--執(zhí)行"+num+"--active:"+taskExecutor.getActiveCount()+"--poolSize:"+taskExecutor.getPoolSize());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        logger.info("end "+(System.currentTimeMillis()-start));
        return "success";
    }

執(zhí)行500個(gè)任務(wù),每個(gè)任務(wù)執(zhí)行需要花費(fèi)6s,開(kāi)啟最大12個(gè)線程


image.png

執(zhí)行完了之后,會(huì)有7個(gè)線程消亡(隨機(jī)的)


image.png

如果此時(shí)再調(diào)用此接口,會(huì)再新創(chuàng)建7個(gè)線程(名字與之前消亡的7個(gè)線程不一樣)
如果在線程消亡之前再次調(diào)用此接口,則還是使用當(dāng)前的12個(gè)線程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容