Java線程池工作過程

【Java線程池工作過程】

  1. 線程池剛創建時,裏面沒有一個線程。任務隊列是作爲參數傳進來的。不過,就算隊列裏面有任務,線程池也不會馬上執行它們。

  2. 當調用 execute() 方法添加一個任務時,線程池會做如下判斷:
    a) 如果正在運行的線程數量小於 corePoolSize,那麼馬上創建線程運行這個任務;
    b) 如果正在運行的線程數量大於或等於 corePoolSize,那麼將這個任務放入隊列;
    c) 如果這時候隊列滿了,而且正在運行的線程數量小於 maximumPoolSize,那麼還是要創建非核心線程立刻運行這個任務;
    d) 如果隊列滿了,而且正在運行的線程數量大於或等於 maximumPoolSize,那麼線程池會拋出異常 RejectExecutionException

  3. 當一個線程完成任務時,它會從隊列中取下一個任務來執行。

  4. 當一個線程無事可做,超過一定的時間(keepAliveTime)時,線程池會判斷,如果當前運行的線程數大於 corePoolSize,那麼這個線程就被停掉。所以線程池的所有任務完成後,它最終會收縮到 corePoolSize 的大小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章