newSingleThreadExecutor
建立一個執行緒的執行緒池,在這個執行緒池中始終只有一個執行緒存在。如果執行緒池中的執行緒因為異常問題退出,那麼會有一個新的執行緒來替代它。此執行緒池保證所有任務的執行順序按照任務的提交順序執行。
原始碼部分:
2. newFixedThreadPool
建立固定大小的執行緒池。每次提交一個任務就建立一個執行緒,直到執行緒達到執行緒池的最大大小。執行緒池的大小一旦達到最大值就會保持不變,如果某個執行緒因為執行異常而結束,那麼執行緒池會補充一個新執行緒。
3. newCachedThreadPool
可根據實際情況,調整執行緒數量的執行緒池,執行緒池中的執行緒數量不確定,如果有空閒執行緒會優先選擇空閒執行緒,如果沒有空閒執行緒並且此時有任務提交會建立新的執行緒。在正常開發中並不推薦這個執行緒池,因為在極端情況下,會因為 newCachedThreadPool 建立過多執行緒而耗盡 CPU 和記憶體資源。
4. newScheduledThreadPool
此執行緒池可以指定固定數量的執行緒來週期性的去執行。比如透過 scheduleAtFixedRate 或者 scheduleWithFixedDelay 來指定週期時間。
PS:另外在寫定時任務時(如果不用 Quartz 框架),最好採用這種執行緒池來做,因為它可以保證裡面始終是存在活的執行緒的。
原始碼如下:
newSingleThreadExecutor
建立一個執行緒的執行緒池,在這個執行緒池中始終只有一個執行緒存在。如果執行緒池中的執行緒因為異常問題退出,那麼會有一個新的執行緒來替代它。此執行緒池保證所有任務的執行順序按照任務的提交順序執行。
原始碼部分:
2. newFixedThreadPool
建立固定大小的執行緒池。每次提交一個任務就建立一個執行緒,直到執行緒達到執行緒池的最大大小。執行緒池的大小一旦達到最大值就會保持不變,如果某個執行緒因為執行異常而結束,那麼執行緒池會補充一個新執行緒。
原始碼部分:
3. newCachedThreadPool
可根據實際情況,調整執行緒數量的執行緒池,執行緒池中的執行緒數量不確定,如果有空閒執行緒會優先選擇空閒執行緒,如果沒有空閒執行緒並且此時有任務提交會建立新的執行緒。在正常開發中並不推薦這個執行緒池,因為在極端情況下,會因為 newCachedThreadPool 建立過多執行緒而耗盡 CPU 和記憶體資源。
原始碼部分:
4. newScheduledThreadPool
此執行緒池可以指定固定數量的執行緒來週期性的去執行。比如透過 scheduleAtFixedRate 或者 scheduleWithFixedDelay 來指定週期時間。
PS:另外在寫定時任務時(如果不用 Quartz 框架),最好採用這種執行緒池來做,因為它可以保證裡面始終是存在活的執行緒的。
原始碼如下: