線程池管理的工具類茅撞,封裝類

一、 為什么要使用線程池:
1.頻繁創(chuàng)建和銷毀線程耗資源,耗時間,換句話說,線程池就能節(jié)約資源,節(jié)約時間稽穆。
2.有的線程執(zhí)行任務的時間甚至比創(chuàng)建和銷毀線程的時間還短冠王。
二 、線程池的作用:
線程池是預先創(chuàng)建線程的一種技術舌镶。線程池在還沒有任務到來之前,創(chuàng)建一定數(shù)量的線程,加入空閑隊列中,然后對這些資源進行復用柱彻,減少頻繁的創(chuàng)建和銷毀對象。

線程池涉及的類:
1.Excutor--java里面線程池的接口
2.ExcutorService--真正的線程池接口
3.ScheduledExecutorService(接口)--和Timer/TimerTask類似,解決那些需要重復執(zhí)行的任務.
4.ThreadPoolExcutor(重點)--ExecutorService的默認實現(xiàn).
5.ScheduledThreadPoolExecutor(實現(xiàn)類)--繼承ThreadPoolExecutor,實現(xiàn)ScheduledExecutorService接口--周期性任務調(diào)度的實現(xiàn).

Executors:
JDK1.5之后的一個新類,提供了一些靜態(tài)工廠,生成一些常用的線程池.ThreadPoolExecutor類的底層實現(xiàn).

1.SingleThreadExecutor(單線程)
用法:

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
singleThreadExecutor.execute(runnable對象);
public static ExecutorService newSingleThreadExecutor() {   
      return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 
                    0L, TimeUnit.MILLISECONDS,
                    new LinkedBlockingQueue<Runnable>()));
}

創(chuàng)建一個單線程的線程池.這個線程池只有一個線程在工程,也就是相當于單線程串行執(zhí)行所有任務.如果這個唯一的線程因為異常結束,那么會有一個新的線程來替代它.此線程池保證所有任務的執(zhí)行順序都會按照提交的順序執(zhí)行.

** 2.FixedThreadPool(固定線程)**
用法:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(num);
fixedThreadPool.execute(runnable對象);
public static ExecutorService newFixedThreadPool(int nThreads) { 
    return new ThreadPoolExecutor(nThreads, nThreads, 
                          0L, TimeUnit.MILLISECONDS,     
                          new LinkedBlockingQueue<Runnable>());
}

創(chuàng)建固定大小的線程池.每次提交一個任務就會創(chuàng)建一個線程,直到線程達到線程池的最大大小.線程池的大小一旦達到最大值就會保持不變,如果某個線程因為異常而技術,那么該線程池會補充一個新的線程.

3.CachedThreadPool(帶緩存)
用法:

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
cachedThreadPool.execute(runnable對象);
public static ExecutorService newCachedThreadPool() { 
       return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                          60L, TimeUnit.SECONDS, 
                          new SynchronousQueue<Runnable>());
}

創(chuàng)建一個可緩存的線程池.如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑(60秒不執(zhí)行任務)的線程,當任務數(shù)增加時,此線程池又可以智能的添加新線程來處理任務.此線程池不會對線程池大小做限制,線程池大小完全依賴與操作系統(tǒng)(或者說JVM)能夠創(chuàng)建的最大線程數(shù).

4.ScheduledThreadPool(定時執(zhí)行)
用法:

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(int corePoolSize);
scheduledThreadPool.schedule(runnable對象, 2000, TimeUnit.MILLISECONDS);
public ScheduledThreadPoolExecutor(int corePoolSize) { 
     super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue());
}

創(chuàng)建一個大小無限的線程池.此線程池支持定時以及周期性執(zhí)行任務的需求.


線程池管理的工具類餐胀,封裝類哟楷。
通過ThreadPoolExecutor的代理類來對線程池的管理實例

import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 線程池管理的工具類,封裝類
 * @author ThinkPad
 * 線程池的管理 否灾,通過java 中的api實現(xiàn)管理
 *   采用conncurrent框架: 非常成熟的并發(fā)框架 卖擅,特別在匿名線程管理非常優(yōu)秀的
 *
 */
public class ThreadManager {
    //通過ThreadPoolExecutor的代理類來對線程池的管理
    private static ThreadPollProxy mThreadPollProxy;
    //單列對象
    public static ThreadPollProxy getThreadPollProxy(){
        synchronized (ThreadPollProxy.class) {
            if(mThreadPollProxy==null){
                mThreadPollProxy=new ThreadPollProxy(3,6,1000); 
            }
        }
        return mThreadPollProxy;
    }
    //通過ThreadPoolExecutor的代理類來對線程池的管理
    public static class ThreadPollProxy{
        private ThreadPoolExecutor poolExecutor;//線程池執(zhí)行者 ,java內(nèi)部通過該api實現(xiàn)對線程池管理
        private int corePoolSize;
        private int maximumPoolSize;
        private long keepAliveTime;
        
        public ThreadPollProxy(int corePoolSize,int maximumPoolSize,long keepAliveTime){
            this.corePoolSize=corePoolSize;
            this.maximumPoolSize=maximumPoolSize;
            this.keepAliveTime=keepAliveTime;
        }
        //對外提供一個執(zhí)行任務的方法
        public void execute(Runnable r){
            if(poolExecutor==null||poolExecutor.isShutdown()){
                poolExecutor=new ThreadPoolExecutor(
                        //核心線程數(shù)量
                        corePoolSize, 
                        //最大線程數(shù)量
                        maximumPoolSize, 
                        //當線程空閑時墨技,保持活躍的時間
                        keepAliveTime,
                        //時間單元 磨镶,毫秒級
                        TimeUnit.MILLISECONDS, 
                        //線程任務隊列 
                        new LinkedBlockingQueue<Runnable>(), 
                        //創(chuàng)建線程的工廠
                        Executors.defaultThreadFactory());
            }
            poolExecutor.execute(r);    
        }
    }
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市健提,隨后出現(xiàn)的幾起案子琳猫,更是在濱河造成了極大的恐慌,老刑警劉巖私痹,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脐嫂,死亡現(xiàn)場離奇詭異,居然都是意外死亡紊遵,警方通過查閱死者的電腦和手機账千,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暗膜,“玉大人匀奏,你說我怎么就攤上這事⊙眩” “怎么了娃善?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瑞佩。 經(jīng)常有香客問我聚磺,道長,這世上最難降的妖魔是什么炬丸? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任瘫寝,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘焕阿。我一直安慰自己咪啡,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布暮屡。 她就那樣靜靜地躺著瑟匆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栽惶。 梳的紋絲不亂的頭發(fā)上愁溜,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音外厂,去河邊找鬼冕象。 笑死,一個胖子當著我的面吹牛汁蝶,可吹牛的內(nèi)容都是我干的渐扮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼掖棉,長吁一口氣:“原來是場噩夢啊……” “哼墓律!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起幔亥,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耻讽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后帕棉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體针肥,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年香伴,在試婚紗的時候發(fā)現(xiàn)自己被綠了慰枕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡即纲,死狀恐怖具帮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情低斋,我是刑警寧澤蜂厅,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拔稳,受9級特大地震影響葛峻,放射性物質(zhì)發(fā)生泄漏锹雏。R本人自食惡果不足惜巴比,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轻绞,春花似錦采记、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奸远,卻和暖如春既棺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背懒叛。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工丸冕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人薛窥。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親檩奠。 傳聞我的和親對象是個殘疾皇子掐松,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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