82 springboot: 線程池ThreadPoolTaskExecutor

    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);//核心線程大小
        executor.setMaxPoolSize(2);//最大線程大小
        executor.setQueueCapacity(500);//d隊(duì)列最大容量
   executor.setThreadNamePrefix("Gith");
         executor.setKeepAliveSeconds(3000);//最大存活 時(shí)間
        executor.initialize();
        executor.submit(new ThreadDemo());
        return executor;
    }



CorePoolSize 核心線程大小
keepAliveSeconds 線程池所能允許的空閑時(shí)間
maxPoolSize 線程池維護(hù)線程的最大數(shù)量
queueCapacity 線程池所能使用的緩沖隊(duì)列

當(dāng)一個(gè)任務(wù)通過(guò)execute(方法漱挚,欲加到線程池中時(shí)枕扫;)
1 如果此時(shí)線程池中的數(shù)量小于corePoolSize,即使線程池中的線程都處于空閑狀態(tài)模孩,也要?jiǎng)?chuàng)建新的線程來(lái)處理被添加的任務(wù)。

2胧华,如果線程池中的數(shù)量等于corePoolsize温数,緩沖隊(duì)列workQueue未滿,那么任務(wù)被放入緩沖隊(duì)列
3驾荣,如果此時(shí)線程池中的數(shù)量大于coreSize,緩沖隊(duì)列workQueue滿外构,并且線程池的數(shù)量小于maximumPoolSize,建立新的線程來(lái)處理被添加的任務(wù)。

4 如果此時(shí)線程池中的數(shù)量大于corePoolSize,緩沖隊(duì)列workQueue滿播掷,并且線程池中的數(shù)量等于maximumPoolSize审编,那么通過(guò)handler所指定的策略來(lái)處理任務(wù)。也就是:處理任務(wù)的優(yōu)先級(jí)為: 核心線程corePoolSize, 任務(wù)隊(duì)列workQueue,最大線程maximumPoolSize歧匈,如果三者都滿了垒酬,使用handler處理被拒絕的任務(wù)。

5件炉,當(dāng)線程池中的線程數(shù)量大于corePoolSize 時(shí)勘究,如果某線程空閑時(shí)間超過(guò)keepAliveTime,線程將被終止斟冕。這樣口糕,線程池可以動(dòng)態(tài)的調(diào)整池中的線程數(shù)。

package ch2.taskexecutor;
 
 
//執(zhí)行器
import java.util.concurrent.Executor;
//異步捕獲助手
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
 
//配置
import org.springframework.scheduling.annotation.AsyncConfigurer;
//異步支持注解
import org.springframework.scheduling.annotation.EnableAsync;
//線程池
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
 
//聲明這是一個(gè)配置類
@Configuration
//引入ch2.taskexecutor下面的@service,@component,@repository,@controller注冊(cè)為bean
@ComponentScan("ch2.taskexecutor")
//開(kāi)啟注解:開(kāi)啟異步支持
@EnableAsync
 
//配置類實(shí)現(xiàn)AsyncConfigurer接口并重寫AsyncConfigurer方法磕蛇,并返回一個(gè)ThreadPoolTaskExecutor
//這樣我們就得到了一個(gè)基于線程池的TaskExecutor
public class TaskExecutorConfig implements AsyncConfigurer {
 
     
    //配置類實(shí)現(xiàn)AsyncConfigurer接口并重寫AsyncConfigurer方法景描,并返回一個(gè)ThreadPoolTaskExecutor
    //這樣我們就得到了一個(gè)基于線程池的TaskExecutor
    @Override
    public Executor getAsyncExecutor() {
        // TODO Auto-generated method stub
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        //如果池中的實(shí)際線程數(shù)小于corePoolSize,無(wú)論是否其中有空閑的線程,都會(huì)給新的任務(wù)產(chǎn)生新的線程
        taskExecutor.setCorePoolSize(5);
        //連接池中保留的最大連接數(shù)秀撇。Default: 15 maxPoolSize  
        taskExecutor.setMaxPoolSize(10);
        //queueCapacity 線程池所使用的緩沖隊(duì)列
        taskExecutor.setQueueCapacity(25);
        taskExecutor.initialize();
        return taskExecutor;
    }
 
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        // TODO Auto-generated method stub
        return null;
    }
     
 
}


package ch2.taskexecutor;
//組件聲明類
import org.springframework.stereotype.Service;
//異步聲明,如果在方法表示是異步方法超棺,如果在類表示異步類。
//這里的方法自動(dòng)被注入使用ThreadPoolTaskExecutor作為TaskExecutor(線程池)
import org.springframework.scheduling.annotation.Async;
 
//聲明為組件
@Service
public class AsyncService {
 
     
    //異步聲明,如果在方法處表示是異步方法呵燕,如果在類處表示異步類(所有的方法都是異步方法)棠绘。
    //這里的方法自動(dòng)被注入使用ThreadPoolTaskExecutor作為TaskExecutor(線程池)
    @Async
    public void executorAsyncTask(Integer i)
    {
        System.out.println("執(zhí)行異步:" + i);
    }
     
     
    //異步聲明,如果在方法處表示是異步方法,如果在類處表示異步類(所有的方法都是異步方法)再扭。
    //這里的方法自動(dòng)被注入使用ThreadPoolTaskExecutor作為TaskExecutor(線程池)
    @Async
    public void executorAsyncTaskPlus(Integer i)
    {
        System.out.println("執(zhí)行異步任務(wù)+1: " + (i+1));
    }
     
}



package ch2.taskexecutor;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
 
public class Main {
 
     
    public static void main(String[] args)
    {
         
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskExecutorConfig.class);
        AsyncService asyncService = context.getBean(AsyncService.class);
         
        for(int i = 0; i<10; i++)
        {
            asyncService.executorAsyncTask(i);
            asyncService.executorAsyncTaskPlus(i);
        }
         
        context.close();
         
    }
     
}





運(yùn)行

執(zhí)行異步:0
執(zhí)行異步任務(wù)+1: 1
執(zhí)行異步任務(wù)+1: 3
執(zhí)行異步:3
執(zhí)行異步任務(wù)+1: 4
執(zhí)行異步任務(wù)+1: 5
執(zhí)行異步:2
執(zhí)行異步:4
執(zhí)行異步任務(wù)+1: 6
執(zhí)行異步:5
執(zhí)行異步:1
執(zhí)行異步任務(wù)+1: 2
執(zhí)行異步任務(wù)+1: 8
執(zhí)行異步:7
執(zhí)行異步任務(wù)+1: 9
執(zhí)行異步任務(wù)+1: 7
執(zhí)行異步任務(wù)+1: 10
執(zhí)行異步:6
執(zhí)行異步:9
執(zhí)行異步:8







?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氧苍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子泛范,更是在濱河造成了極大的恐慌让虐,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敦跌,死亡現(xiàn)場(chǎng)離奇詭異澄干,居然都是意外死亡逛揩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門麸俘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辩稽,“玉大人,你說(shuō)我怎么就攤上這事从媚〕研梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵拜效,是天一觀的道長(zhǎng)喷众。 經(jīng)常有香客問(wèn)我,道長(zhǎng)紧憾,這世上最難降的妖魔是什么到千? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮赴穗,結(jié)果婚禮上憔四,老公的妹妹穿的比我還像新娘。我一直安慰自己般眉,他們只是感情好了赵,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著甸赃,像睡著了一般柿汛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上埠对,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天络断,我揣著相機(jī)與錄音,去河邊找鬼鸠窗。 笑死妓羊,一個(gè)胖子當(dāng)著我的面吹牛胯究,可吹牛的內(nèi)容都是我干的稍计。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼裕循,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼臣嚣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剥哑,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤硅则,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后株婴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體怎虫,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡暑认,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了大审。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸际。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖徒扶,靈堂內(nèi)的尸體忽然破棺而出粮彤,到底是詐尸還是另有隱情,我是刑警寧澤姜骡,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布导坟,位于F島的核電站,受9級(jí)特大地震影響圈澈,放射性物質(zhì)發(fā)生泄漏惫周。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一康栈、第九天 我趴在偏房一處隱蔽的房頂上張望闯两。 院中可真熱鬧,春花似錦谅将、人聲如沸漾狼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逊躁。三九已至,卻和暖如春隅熙,著一層夾襖步出監(jiān)牢的瞬間稽煤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工囚戚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酵熙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓驰坊,卻偏偏與公主長(zhǎng)得像匾二,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拳芙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容