五種線程池的分類和做用

一、newCachedThreadPool

做用:建立一個可根據須要建立新線程的線程池,可是在之前構造的線程可用時將重用它們,並在須要時使用提供的 ThreadFactory 建立新線程。緩存

特徵: 
(1)線程池中數量沒有固定,可達到最大值(Interger. MAX_VALUE) 
(2)線程池中的線程可進行緩存重複利用和回收(回收默認時間爲1分鐘) 
(3)當線程池中,沒有可用線程,會從新建立一個線程併發

建立方式: Executors.newCachedThreadPool();線程

二、newFixedThreadPool

做用:建立一個可重用固定線程數的線程池,以共享的無界隊列方式來運行這些線程。在任意點,在大多數 nThreads 線程會處於處理任務的活動狀態。若是在全部線程處於活動狀態時提交附加任務,則在有可用線程以前,附加任務將在隊列中等待。若是在關閉前的執行期間因爲失敗而致使任何線程終止,那麼一個新線程將代替它執行後續的任務(若是須要)。在某個線程被顯式地關閉以前,池中的線程將一直存在。隊列

特徵: 
(1)線程池中的線程處於必定的量,能夠很好的控制線程的併發量 
(2)線程能夠重複被使用,在顯示關閉以前,都將一直存在 
(3)超出必定量的線程被提交時候需在隊列中等待thread

建立方式: 
(1)Executors.newFixedThreadPool(int nThreads);//nThreads爲線程的數量 
(2)Executors.newFixedThreadPool(int nThreads,ThreadFactory threadFactory);//nThreads爲線程的數量,threadFactory建立線程的工廠方式配置

三、newSingleThreadExecutor

做用:建立一個使用單個 worker 線程的 Executor,以無界隊列方式來運行該線程。(注意,若是由於在關閉前的執行期間出現失敗而終止了此單個線程,那麼若是須要,一個新線程將代替它執行後續的任務)。可保證順序地執行各個任務,而且在任意給定的時間不會有多個線程是活動的。與其餘等效的 newFixedThreadPool(1) 不一樣,可保證無需從新配置此方法所返回的執行程序便可使用其餘的線程。線程池

特徵: 
(1)線程池中最多執行1個線程,以後提交的線程活動將會排在隊列中以此執行程序

建立方式: 
(1)Executors.newSingleThreadExecutor() ; 
(2)Executors.newSingleThreadExecutor(ThreadFactory threadFactory);// threadFactory建立線程的工廠方式方法

 

四、newScheduleThreadPool

做用: 建立一個線程池,它可安排在給定延遲後運行命令或者按期地執行。時間

特徵: 
(1)線程池中具備指定數量的線程,即使是空線程也將保留 
(2)可定時或者延遲執行線程活動

建立方式: 
(1)Executors.newScheduledThreadPool(int corePoolSize);// corePoolSize線程的個數 
(2)newScheduledThreadPool(int corePoolSize, ThreadFactory threadFactory);// corePoolSize線程的個數,threadFactory建立線程的工廠

 

五、newSingleThreadScheduledExecutor

做用: 建立一個單線程執行程序,它可安排在給定延遲後運行命令或者按期地執行。

特徵: 
(1)線程池中最多執行1個線程,以後提交的線程活動將會排在隊列中以此執行 
(2)可定時或者延遲執行線程活動

建立方式: (1)Executors.newSingleThreadScheduledExecutor() ; (2)Executors.newSingleThreadScheduledExecutor(ThreadFactory threadFactory) ;//threadFactory建立線程的工廠

相關文章
相關標籤/搜索