<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    ThreadPoolExecutor運轉機制詳解 .

    Posted on 2011-10-12 18:05 瘋狂 閱讀(1938) 評論(0)  編輯  收藏 所屬分類: java

    最近發現幾起對ThreadPoolExecutor的誤用,其中包括自己,發現都是因為沒有仔細看注釋和內部運轉機制,想當然的揣測參數導致,先看一下新建一個ThreadPoolExecutor的構建參數:

     

    1. public ThreadPoolExecutor(int corePoolSize,  
    2.                           int maximumPoolSize,  
    3.                           long keepAliveTime,  
    4.                           TimeUnit unit,  
    5.                           BlockingQueue<Runnable> workQueue,  
    6.                           ThreadFactory threadFactory,  
    7.                           RejectedExecutionHandler handler)  

     

    看這個參數很容易讓人以為是線程池里保持corePoolSize個線程,如果不夠用,就加線程入池直至maximumPoolSize大小,如果還不夠就往workQueue里加,如果workQueue也不夠就用RejectedExecutionHandler來做拒絕處理。

    但實際情況不是這樣,具體流程如下:

     

    1)線程池的大小>活動的線程 就放入queue,由于有空閑的線程,就不創建線程直接用空閑的線程處理
    2)線程池的大小<活動的線程&& 線程池的大小>=最大限制數,沒有空閑的線程,但不能創建線程,事件入queue等待有空閑的線程,如果超時,使RejectedExecutionHandler處理
    3)線程池的大小<活動的線程&& 線程池的大小<最大限制數,沒有空閑線程,可以創建線程,直接創建新線程處理新事件

    內部結構如下所示:

    從中可以發現ThreadPoolExecutor就是依靠BlockingQueue的阻塞機制來維持線程池,當池子里的線程無事可干的時候就通過workQueue.take()阻塞住。

    其實可以通過Executes來學學幾種特殊的ThreadPoolExecutor是如何構建的。

     

    1. public static ExecutorService newFixedThreadPool(int nThreads) {  
    2.     return new ThreadPoolExecutor(nThreads, nThreads,  
    3.                                   0L, TimeUnit.MILLISECONDS,  
    4.                                   new LinkedBlockingQueue<Runnable>());  
    5. }  

     

    newFixedThreadPool就是一個固定大小的ThreadPool

     

    1. public static ExecutorService newCachedThreadPool() {  
    2.     return new ThreadPoolExecutor(0, Integer.MAX_VALUE,  
    3.                                   60L, TimeUnit.SECONDS,  
    4.                                   new SynchronousQueue<Runnable>());  
    5. }  

     

    newCachedThreadPool比較適合沒有固定大小并且比較快速就能完成的小任務,沒必要維持一個Pool,這比直接new Thread來處理的好處是能在60秒內重用已創建的線程。

    其他類型的ThreadPool看看構建參數再結合上面所說的特性就大致知道它的特性
    轉載自:http://blog.csdn.net/cutesource/article/details/6061229

    主站蜘蛛池模板: 亚洲视频免费在线观看| 国产亚洲福利一区二区免费看| 91免费国产视频| 亚洲色一色噜一噜噜噜| 男女啪啪免费体验区| 亚洲女同成人AⅤ人片在线观看| 国产精品亚洲色婷婷99久久精品| 永久免费观看的毛片的网站| 国产精品日本亚洲777| 亚洲欧洲精品成人久久奇米网 | 精品亚洲视频在线观看 | 免费播放在线日本感人片| 亚洲三区在线观看无套内射| 国产三级在线免费| 亚洲精彩视频在线观看| 成人片黄网站A毛片免费| 日韩亚洲人成在线综合| 亚洲日本一区二区一本一道 | h视频在线观看免费完整版| 亚洲国产高清美女在线观看| 国产精品成人免费视频网站京东| 亚洲av永久中文无码精品综合| 免费在线观看a级毛片| 中国一级毛片免费看视频| 久久久久久久亚洲Av无码| 性生交片免费无码看人| 免费看内射乌克兰女| 亚洲综合一区二区国产精品| 国产精品久久久久久久久久免费| 一级毛片完整版免费播放一区| 无码乱人伦一区二区亚洲| 午夜免费福利网站| 中文字字幕在线高清免费电影| 亚洲综合图片小说区热久久| 国产美女精品久久久久久久免费| 你好老叔电影观看免费| 2020天堂在线亚洲精品专区| 亚洲人成色77777| 好吊妞在线成人免费| 中国一级全黄的免费观看| 亚洲性无码AV中文字幕|