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

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

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

    xylz,imxylz

    關(guān)注后端架構(gòu)、中間件、分布式和并發(fā)編程

       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      111 隨筆 :: 10 文章 :: 2680 評論 :: 0 Trackbacks

    Java里面線程池的頂級接口是Executor,但是嚴(yán)格意義上講Executor并不是一個線程池,而只是一個執(zhí)行線程的工具。真正的線程池接口是ExecutorService。

    下面這張圖完整描述了線程池的類體系結(jié)構(gòu)。

    Executor-class

    首先Executor的execute方法只是執(zhí)行一個Runnable的任務(wù),當(dāng)然了從某種角度上將最后的實現(xiàn)類也是在線程中啟動此任務(wù)的。根據(jù)線程池的執(zhí)行策略最后這個任務(wù)可能在新的線程中執(zhí)行,或者線程池中的某個線程,甚至是調(diào)用者線程中執(zhí)行(相當(dāng)于直接運行Runnable的run方法)。這點在后面會詳細(xì)說明。

    ExecutorService在Executor的基礎(chǔ)上增加了一些方法,其中有兩個核心的方法:

    • Future<?> submit(Runnable task)
    • <T> Future<T> submit(Callable<T> task)

    這兩個方法都是向線程池中提交任務(wù),它們的區(qū)別在于Runnable在執(zhí)行完畢后沒有結(jié)果,Callable執(zhí)行完畢后有一個結(jié)果。這在多個線程中傳遞狀態(tài)和結(jié)果是非常有用的。另外他們的相同點在于都返回一個Future對象。Future對象可以阻塞線程直到運行完畢(獲取結(jié)果,如果有的話),也可以取消任務(wù)執(zhí)行,當(dāng)然也能夠檢測任務(wù)是否被取消或者是否執(zhí)行完畢。

    在沒有Future之前我們檢測一個線程是否執(zhí)行完畢通常使用Thread.join()或者用一個死循環(huán)加狀態(tài)位來描述線程執(zhí)行完畢。現(xiàn)在有了更好的方法能夠阻塞線程,檢測任務(wù)執(zhí)行完畢甚至取消執(zhí)行中或者未開始執(zhí)行的任務(wù)。

     

    ScheduledExecutorService描述的功能和Timer/TimerTask類似,解決那些需要任務(wù)重復(fù)執(zhí)行的問題。這包括延遲時間一次性執(zhí)行、延遲時間周期性執(zhí)行以及固定延遲時間周期性執(zhí)行等。當(dāng)然了繼承ExecutorService的ScheduledExecutorService擁有ExecutorService的全部特性。

     

    ThreadPoolExecutor是ExecutorService的默認(rèn)實現(xiàn),其中的配置、策略也是比較復(fù)雜的,在后面的章節(jié)中會有詳細(xì)的分析。

    ScheduledThreadPoolExecutor是繼承ThreadPoolExecutor的ScheduledExecutorService接口實現(xiàn),周期性任務(wù)調(diào)度的類實現(xiàn),在后面的章節(jié)中會有詳細(xì)的分析。

    這里需要稍微提一下的是CompletionService接口,它是用于描述順序獲取執(zhí)行結(jié)果的一個線程池包裝器。它依賴一個具體的線程池調(diào)度,但是能夠根據(jù)任務(wù)的執(zhí)行先后順序得到執(zhí)行結(jié)果,這在某些情況下可能提高并發(fā)效率。

     

    要配置一個線程池是比較復(fù)雜的,尤其是對于線程池的原理不是很清楚的情況下,很有可能配置的線程池不是較優(yōu)的,因此在Executors類里面提供了一些靜態(tài)工廠,生成一些常用的線程池。

    • newSingleThreadExecutor:創(chuàng)建一個單線程的線程池。這個線程池只有一個線程在工作,也就是相當(dāng)于單線程串行執(zhí)行所有任務(wù)。如果這個唯一的線程因為異常結(jié)束,那么會有一個新的線程來替代它。此線程池保證所有任務(wù)的執(zhí)行順序按照任務(wù)的提交順序執(zhí)行。
    • newFixedThreadPool:創(chuàng)建固定大小的線程池。每次提交一個任務(wù)就創(chuàng)建一個線程,直到線程達(dá)到線程池的最大大小。線程池的大小一旦達(dá)到最大值就會保持不變,如果某個線程因為執(zhí)行異常而結(jié)束,那么線程池會補充一個新線程。
    • newCachedThreadPool:創(chuàng)建一個可緩存的線程池。如果線程池的大小超過了處理任務(wù)所需要的線程,那么就會回收部分空閑(60秒不執(zhí)行任務(wù))的線程,當(dāng)任務(wù)數(shù)增加時,此線程池又可以智能的添加新線程來處理任務(wù)。此線程池不會對線程池大小做限制,線程池大小完全依賴于操作系統(tǒng)(或者說JVM)能夠創(chuàng)建的最大線程大小。
    • newScheduledThreadPool:創(chuàng)建一個大小無限的線程池。此線程池支持定時以及周期性執(zhí)行任務(wù)的需求。
    • newSingleThreadScheduledExecutor:創(chuàng)建一個單線程的線程池。此線程池支持定時以及周期性執(zhí)行任務(wù)的需求。

    在詳細(xì)講解ThreadPoolExecutor的時候會具體討論上述參數(shù)配置后的意義和原理。

    線程池是一個復(fù)雜的任務(wù)調(diào)度工具,因此它涉及到任務(wù)、線程池等的生命周期問題,在下一節(jié)中來探討下這個問題。

     



    ©2009-2014 IMXYLZ |求賢若渴
    posted on 2010-12-21 23:32 imxylz 閱讀(13779) 評論(4)  編輯  收藏 所屬分類: J2EEJava Concurrency

    評論

    # re: 深入淺出 Java Concurrency (29): 線程池 part 2 Executor 以及Executors 2010-12-22 23:09 yeshucheng
    一直在看你寫的連載,呵呵。

    PS:類圖用什么工具畫的?  回復(fù)  更多評論
      

    # re: 深入淺出 Java Concurrency (29): 線程池 part 2 Executor 以及Executors 2010-12-23 14:09 xylz
    @yeshucheng

    Enterprise Architect  回復(fù)  更多評論
      

    # re: 深入淺出 Java Concurrency (29): 線程池 part 2 Executor 以及Executors 2015-01-27 14:44 Windchill_Fan
    寫得很不錯,持續(xù)學(xué)習(xí)中  回復(fù)  更多評論
      

    # re: 深入淺出 Java Concurrency (29): 線程池 part 2 Executor 以及Executors 2016-03-21 16:22 ubuntuvim
    @yeshucheng
    JUDE,http://jude.change-vision.com/jude-web/product/community.html  回復(fù)  更多評論
      


    ©2009-2014 IMXYLZ
    主站蜘蛛池模板: 亚洲偷自拍拍综合网| 亚洲av无码成人精品区在线播放 | 亚洲综合久久一本伊伊区| 国产精品免费观看调教网| 亚洲av鲁丝一区二区三区| 桃子视频在线观看高清免费视频| 国产AV无码专区亚洲AV漫画| 中文字幕免费不卡二区| 久久香蕉国产线看观看亚洲片| 免费无码H肉动漫在线观看麻豆| 亚洲av无码成h人动漫无遮挡 | a级毛片在线免费看| 亚洲av无码一区二区三区不卡| 99爱免费观看视频在线| 亚洲中文字幕无码av在线| 香蕉视频在线观看免费国产婷婷| 亚洲AV成人精品日韩一区| 亚洲一区无码精品色| 免费在线中文日本| 亚洲电影在线播放| 日韩成全视频观看免费观看高清| 无码 免费 国产在线观看91| 亚洲精品成人无码中文毛片不卡| 免费人成网站在线观看不卡| 亚洲国产中文在线视频| 国产精品久久香蕉免费播放| igao激情在线视频免费| 久久亚洲精品成人AV| AV免费网址在线观看| xxxx日本在线播放免费不卡| 亚洲制服中文字幕第一区| 好男人www免费高清视频在线| 黄色网址免费在线| 亚洲自偷自拍另类12p| 免费观看a级毛片| 最近免费mv在线观看动漫| 亚洲欧美日韩久久精品| 国产亚洲成av人片在线观看| 无码专区永久免费AV网站| 久久成人18免费网站| 国产成人亚洲综合网站不卡|