日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開源 > php教程 > Java線程池總結(jié)

Java線程池總結(jié)

來(lái)源:程序員人生   發(fā)布時(shí)間:2017-02-24 10:37:10 閱讀次數(shù):3235次

學(xué)習(xí)Java的同學(xué)注意了!!! 
學(xué)習(xí)進(jìn)程中遇到甚么問(wèn)題或想獲得學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交換群,群號(hào)碼:183993990  我們1起學(xué)Java!


    假定1個(gè)服務(wù)器完成1項(xiàng)任務(wù)所需時(shí)間為:T1 創(chuàng)建線程時(shí)間,T2 在線程中履行任務(wù)的時(shí)間,T3 燒毀線程時(shí)間。當(dāng)T1 + T3 遠(yuǎn)大于 T2時(shí),采取多線程技術(shù)可以顯著減少處理器單元的閑置時(shí)間,增加處理器單元的吞吐能力。

    線程池就是1個(gè)線程的容器,每次只履行額定數(shù)量的線程, 線程池作用就是限制系統(tǒng)中履行線程的數(shù)量。采取線程池不但調(diào)劑T1,T3產(chǎn)生的時(shí)間段,而且它還顯著減少了創(chuàng)建線程的數(shù)目。

    為何要用線程池:

    1)減少了創(chuàng)建和燒毀線程的次數(shù),每一個(gè)工作線程都可以被重復(fù)利用,可履行多個(gè)任務(wù)

    2)可以根據(jù)系統(tǒng)的承受能力,調(diào)劑線程池中工作線線程的數(shù)目,避免由于由于消耗過(guò)量的內(nèi)存,而把服務(wù)器累趴下(每一個(gè)線程需要大約1MB內(nèi)存,線程開的越多,消耗的內(nèi)存也就越大,最后死機(jī))

      Java1.5以后,Java 提供了自己的線程池ThreadPoolExecutor類。

 

ThreadPoolExecutor使用簡(jiǎn)介

 

線程池類為java.util.concurrent.ThreadPoolExecutor,經(jīng)常使用構(gòu)造方法為:

public ThreadPoolExecutor(  

            int corePoolSize,  

            int maximumPoolSize,  

            long keepAliveTime,  

            TimeUnit unit,  

            BlockingQueue<Runnable> workQueue) 

 

corePoolSize 指的是保存的線程池大小。

maximumPoolSize 指的是線程池的最大大小。

keepAliveTime 指的是空閑線程結(jié)束的超時(shí)時(shí)間。

unit 是1個(gè)枚舉,表示 keepAliveTime 的單位。

workQueue 表示寄存任務(wù)的隊(duì)列。

 

    1個(gè)任務(wù)通過(guò) execute(Runnable)方法被添加到線程池,任務(wù)就是1個(gè) Runnable類型的對(duì)象,任務(wù)的履行方法就是 Runnable類型對(duì)象的run()方法。

 

線程池的工作進(jìn)程以下:

1、線程池剛創(chuàng)建時(shí),里面沒有1個(gè)線程。任務(wù)隊(duì)列是作為參數(shù)傳進(jìn)來(lái)的。不過(guò),就算隊(duì)列里面有任務(wù),線程池也不會(huì)馬上履行它們。

2、當(dāng)調(diào)用 execute() 方法添加1個(gè)任務(wù)時(shí),線程池會(huì)做以下判斷:

    a. 如果正在運(yùn)行的線程數(shù)量小于 corePoolSize,那末馬上創(chuàng)建線程運(yùn)行這個(gè)任務(wù);

    b. 如果正在運(yùn)行的線程數(shù)量大于或等于corePoolSize,那末將這個(gè)任務(wù)放入隊(duì)列。

    c. 如果這時(shí)候候隊(duì)列滿了,而且正在運(yùn)行的線程數(shù)量小于 maximumPoolSize,那末還是要?jiǎng)?chuàng)建線程運(yùn)行這個(gè)任務(wù);

    d. 如果隊(duì)列滿了,而且正在運(yùn)行的線程數(shù)量大于或等于 maximumPoolSize,那末線程池會(huì)拋出異常,告知調(diào)用者“我不能再接受任務(wù)了”。

3、當(dāng)1個(gè)線程完成任務(wù)時(shí),它會(huì)從隊(duì)列中取下1個(gè)任務(wù)來(lái)履行。

4、當(dāng)1個(gè)線程無(wú)事可做,超過(guò)1定的時(shí)間(keepAliveTime)時(shí),線程池會(huì)判斷,如果當(dāng)前運(yùn)行的線程數(shù)大于 corePoolSize,那末這個(gè)線程就被停掉。所以線程池的所有任務(wù)完成后,它終究會(huì)收縮到 corePoolSize 的大小。

   這樣的進(jìn)程說(shuō)明,其實(shí)不是先加入任務(wù)就1定會(huì)先履行。假定隊(duì)列大小為10,corePoolSize為3,maximumPoolSize 為6,那末當(dāng)加入 20 個(gè)任務(wù)時(shí),履行的順序就是這樣的:首先履行任務(wù) 1、2、3,然后任務(wù)4~13被放入隊(duì)列。這時(shí)候候隊(duì)列滿了,任務(wù) 14、15、16 會(huì)被馬上履行,而任務(wù) 17~20 則會(huì)拋出異常。終究順序是:1、2、3、14、15、16、4、5、6、7、8、9、10、11、12、13。

復(fù)制代碼
下面是1個(gè)線程池使用的例子:

public class TestThreadPool {  

    public static void main(String[] args) {  

        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(3, 6, 5,TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());  

         for (int i = 1; i <= 20; i++) {   

             threadPool.execute(new ThreadPoolTask());  

             //threadPool.shutdown();  
        }  
    }  
}
 

創(chuàng)建 ThreadPoolTask類:

public class ThreadPoolTask implements Runnable {  
    public void run() {  
        try {  
            System.out.println("開始履行任務(wù):" + attachData);       
            Thread.sleep(100);  
        }
        catch(Exception e){  
            e.printStackTrace();  
        }  
    }  
}
復(fù)制代碼


1、BlockingQueue 只是1個(gè)接口,經(jīng)常使用的實(shí)現(xiàn)類有 LinkedBlockingQueue 和 ArrayBlockingQueue。用 LinkedBlockingQueue 的好處在于沒有大小限制。這樣的話,由于隊(duì)列不會(huì)滿,所以 execute() 不會(huì)拋出異常,而線程池中運(yùn)行的線程數(shù)也永久不會(huì)超過(guò) corePoolSize 個(gè),keepAliveTime 參數(shù)也就沒成心義了。

2、shutdown() 方法不會(huì)阻塞。調(diào)用 shutdown() 方法以后,主線程就馬上結(jié)束了,而線程池會(huì)繼續(xù)運(yùn)行直到所有任務(wù)履行完才會(huì)停止。如果不調(diào)用 shutdown() 方法,那末線程池會(huì)1直保持下去,以便隨時(shí)添加新的任務(wù)。

學(xué)習(xí)Java的同學(xué)注意了!!! 
學(xué)習(xí)進(jìn)程中遇到甚么問(wèn)題或想獲得學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交換群,群號(hào)碼:183993990  我們1起學(xué)Java!

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产亚洲精品久久久久动 | 激情片网站 | 国产视频在线免费观看 | 美女又黄又免费的视频 | 波多野结衣电影久久 | 波多野结衣国产 | 久久嫩草精品久久久精品才艺表演 | 亚洲www啪成人一区二区麻豆 | 久久看视频 | 精品一区二区三区在线视频 | 91视频导航| 午夜在线免费观看视频 | 成人性视频免费网站 | 欧美三区视频 | 国产精品久久久久久影视 | 99精品热| 欧美日韩在线视频观看 | 欧美精品在线一区 | 亚洲欧美高清 | 欧美福利在线 | 日产精品久久久久久久性色 | 综合国产 | 亚州av一区二区 | 国产成人精品一区二区在线 | 欧美美女啪啪 | 精品美女在线视频 | 91精品入口 | 一区二区日韩精品 | 国产一区二区视频免费观看 | 成人在线观看www | 午夜精品久久久久久久久久久久 | 看黄在线| 国产一二区视频 | 久久高清免费 | 片黄在线观看 | 久久久久国产一区二区三区四区 | 国产精品久久久久久久免费软件 | 殴美一级片 | 999久久久免费精品国产 | 视频一区在线 | 午夜成人在线视频 |