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

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

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

    xylz,imxylz

    關注后端架構、中間件、分布式和并發編程

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

     

    我們知道線程是有多種執行狀態的,同樣管理線程的線程池也有多種狀態。JVM會在所有線程(非后臺daemon線程)全部終止后才退出,為了節省資源和有效釋放資源關閉一個線程池就顯得很重要。有時候無法正確的關閉線程池,將會阻止JVM的結束。

    線程池Executor是異步的執行任務,因此任何時刻不能夠直接獲取提交的任務的狀態。這些任務有可能已經完成,也有可能正在執行或者還在排隊等待執行。因此關閉線程池可能出現一下幾種情況:

    • 平緩關閉:已經啟動的任務全部執行完畢,同時不再接受新的任務
    • 立即關閉:取消所有正在執行和未執行的任務

    另外關閉線程池后對于任務的狀態應該有相應的反饋信息。

    圖1 描述了線程池的4種狀態。

    • 線程池在構造前(new操作)是初始狀態,一旦構造完成線程池就進入了執行狀態RUNNING。嚴格意義上講線程池構造完成后并沒有線程被立即啟動,只有進行“預啟動”或者接收到任務的時候才會啟動線程。這個會后面線程池的原理會詳細分析。但是線程池是出于運行狀態,隨時準備接受任務來執行。
    • 線程池運行中可以通過shutdown()和shutdownNow()來改變運行狀態。shutdown()是一個平緩的關閉過程,線程池停止接受新的任務,同時等待已經提交的任務執行完畢,包括那些進入隊列還沒有開始的任務,這時候線程池處于SHUTDOWN狀態;shutdownNow()是一個立即關閉過程,線程池停止接受新的任務,同時線程池取消所有執行的任務和已經進入隊列但是還沒有執行的任務,這時候線程池處于STOP狀態。
    • 一旦shutdown()或者shutdownNow()執行完畢,線程池就進入TERMINATED狀態,此時線程池就結束了。
    • isTerminating()描述的是SHUTDOWN和STOP兩種狀態。
    • isShutdown()描述的是非RUNNING狀態,也就是SHUTDOWN/STOP/TERMINATED三種狀態。

     

    Executor-Lifecycle

    圖1

    線程池的API如下:

    ExecutorService-LifeCycle

    圖2

    其中shutdownNow()會返回那些已經進入了隊列但是還沒有執行的任務列表。awaitTermination描述的是等待線程池關閉的時間,如果等待時間線程池還沒有關閉將會拋出一個超時異常。

    對于關閉線程池期間發生的任務提交情況就會觸發一個拒絕執行的操作。這是java.util.concurrent.RejectedExecutionHandler描述的任務操作。下一個小結中將描述這些任務被拒絕后的操作。

     

    總結下這個小節:

    1. 線程池有運行、關閉、停止、結束四種狀態,結束后就會釋放所有資源
    2. 平緩關閉線程池使用shutdown()
    3. 立即關閉線程池使用shutdownNow(),同時得到未執行的任務列表
    4. 檢測線程池是否正處于關閉中,使用isShutdown()
    5. 檢測線程池是否已經關閉使用isTerminated()
    6. 定時或者永久等待線程池關閉結束使用awaitTermination()操作

     



    ©2009-2014 IMXYLZ |求賢若渴
    posted on 2011-01-04 22:54 imxylz 閱讀(12587) 評論(6)  編輯  收藏 所屬分類: Java Concurrency

    評論

    # re: 深入淺出 Java Concurrency (30): 線程池 part 3 Executor 生命周期 2011-01-04 23:02 yeshucheng
    lz你寫的東西,是時候把它轉成PDF附件,這樣以后閱讀更方便。  回復  更多評論
      

    # re: 深入淺出 Java Concurrency (30): 線程池 part 3 Executor 生命周期 2011-01-04 23:04 yeshucheng
    感覺你這里還少了幾個狀態的介紹,呵呵  回復  更多評論
      

    # re: 深入淺出 Java Concurrency (30): 線程池 part 3 Executor 生命周期 2011-01-04 23:05 xylz
    @yeshucheng
    這個建議不錯,整理完成了來一個完整的PDF吧,每一節搞一個PDF閑麻煩  回復  更多評論
      

    # re: 深入淺出 Java Concurrency (30): 線程池 part 3 Executor 生命周期 2011-01-04 23:06 xylz
    @yeshucheng
    還有么?這個狀態是線程池的,不是線程的狀態。  回復  更多評論
      

    # re: 深入淺出 Java Concurrency (30): 線程池 part 3 Executor 生命周期 2012-11-14 11:14 yufeng
    有isTerminating 這個方法?
    isShutdown 和 isTerminated 的意思好像不太對哦。。  回復  更多評論
      

    # re: 深入淺出 Java Concurrency (30): 線程池 part 3 Executor 生命周期[未登錄] 2014-08-25 11:46 nemo
    請問ThreadPoolExecutor是否有查看線程池是否空閑,當前有多少個線程正在工作的接口呢....

    我submit一個runnable接口任務,最后怎樣來確認這些在線程池中的任務都完成了呢?  回復  更多評論
      


    ©2009-2014 IMXYLZ
    主站蜘蛛池模板: 天堂亚洲免费视频| 日本一道一区二区免费看| 在线观看亚洲精品福利片| 爱情岛论坛亚洲品质自拍视频网站| 成年人性生活免费视频| 中文字幕亚洲综合久久综合| 好男人www免费高清视频在线| 亚洲欧美日韩自偷自拍| 国产成人在线免费观看| 高潮内射免费看片| 国产成人亚洲精品影院| 国产免费阿v精品视频网址| 久久夜色精品国产嚕嚕亚洲av| 特级精品毛片免费观看| 亚洲黄色中文字幕| 成年女人午夜毛片免费看| 国产成人精品亚洲一区| 亚洲国产精品日韩| 97在线免费观看视频| 亚洲欧洲中文日产| 日本特黄特色免费大片| 亚洲精品国产日韩无码AV永久免费网| 亚洲线精品一区二区三区影音先锋| a级午夜毛片免费一区二区| 亚洲导航深夜福利| 日韩免费高清视频网站| 好湿好大好紧好爽免费视频| 亚洲视频在线观看免费| 成人在线免费观看| 一级全免费视频播放| 97亚洲熟妇自偷自拍另类图片| 女人18毛片免费观看| 国产日韩AV免费无码一区二区三区| 亚洲欧洲日韩不卡| 黄网址在线永久免费观看 | 99视频精品全部免费观看| 亚洲国产激情在线一区| 久久久久亚洲AV无码专区网站| 色猫咪免费人成网站在线观看| 亚洲码和欧洲码一码二码三码| 精品亚洲综合在线第一区|