JAVA線程池的執行過程


 

1. 線程池剛創建時,里面沒有一個線程。任務隊列是作為參數傳進來的。不過,就算隊列里面
有任務,線程池也不會馬上執行它們。
2. 當調用 execute() 方法添加一個任務時,線程池會做如下判斷:
a) 如果正在運行的線程數量小於 corePoolSize,那么馬上創建線程運行這個任務;
b) 如果正在運行的線程數量大於或等於 corePoolSize,那么將這個任務放入隊列;
c) 如果這時候隊列滿了,而且正在運行的線程數量小於 maximumPoolSize,那么還是要
創建非核心線程立刻運行這個任務;
d) 如果隊列滿了,而且正在運行的線程數量大於或等於 maximumPoolSize,那么線程池
會拋出異常 RejectExecutionException。
3. 當一個線程完成任務時,它會從隊列中取下一個任務來執行。
4. 當一個線程無事可做,超過一定的時間(keepAliveTime)時,線程池會判斷,如果當前運
行的線程數大於 corePoolSize,那么這個線程就被停掉。所以線程池的所有任務完成后,它
最終會收縮到 corePoolSize 的大小

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM