1. 程式人生 > >Executors(執行器)提供的四種執行緒池

Executors(執行器)提供的四種執行緒池

java執行緒池:

newCacheThreadPool :建立一個可快取執行緒池,執行緒的數量不固定,可以根據需求自動建立執行緒

這種型別的執行緒池特點是:

1、工作執行緒的建立數量幾乎沒有限制(其實也有限制的,數目為Interger. MAX_VALUE), 這樣可靈活的往執行緒池中新增執行緒。
2、如果長時間沒有往執行緒池中提交任務,即如果工作執行緒空閒了指定的時間(預設為1分鐘),則該工作執行緒將自動終止。終止後,如果你又提交了新的任務,則執行緒池重新建立一個工作執行緒。
3、在使用CachedThreadPool時,一定要注意控制任務的數量,否則,由於大量執行緒同時執行,很有會造成系統癱瘓。
//摘抄自

https://blog.csdn.net/sayoko06/article/details/79579639

 

newFixThreadPool:建立一個定長的執行緒池,可控制執行緒最大併發數,超出的執行緒會在佇列中等待

建立一個可重用固定執行緒數的執行緒池,以共享的無界佇列方式來執行這些執行緒。在任意點,在大多數 nThreads 執行緒會處於處理任務的活動狀態。如果在所有執行緒處於活動狀態時提交附加任務,則在有可用執行緒之前,附加任務將在佇列中等待。如果在關閉前的執行期間由於失敗而導致任何執行緒終止,那麼一個新執行緒將代替它執行後續的任務(如果需要)。在某個執行緒被顯式地關閉之前,池中的執行緒將一直存在。

//摘抄自https://g.csdn.net/sinat_36475966/article/details/80689279

newScheduledThreadPool :建立一個定長執行緒池,支援定時及週期性任務執行

Java 5 推出了基於執行緒池設計的 ScheduledExecutor。其設計思想是,每一個被排程的任務都會由執行緒池中一個執行緒去執行,因此任務是併發執行的,相互之間不會受到干擾。需要注意的是,只有當任務的執行時間到來時,ScheduedExecutor 才會真正啟動一個執行緒,其餘時間 ScheduledExecutor 都是在輪詢任務的狀態。

//摘抄自https://blog.csdn.net/bobonow/article/details/6936293

newSingleThreadPool :建立一個單執行緒化的執行緒池,他只會用唯一的執行緒來執行任務,保證所有任務按照指定順序(FIFO,LIFO,優先順序)執行

單個後臺執行緒 (其緩衝佇列是無界的)。
建立一個單執行緒的執行緒池。這個執行緒池只有一個核心執行緒在工作,也就是相當於單執行緒序列執行所有任務。如果這個唯一的執行緒因為異常結束,那麼會有一個新的執行緒來替代它。此執行緒池保證所有任務的執行順序按照任務的提交順序執行。

//摘抄自https://www.jianshu.com/p/1e90648ef1f4