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