四種常用執行緒池解析

2022-09-24 01:48:06 字數 1279 閱讀 2791

我們從原始碼來分析一下四種常見的執行緒池,我們常見的四種執行緒池分別為newcachedthreadpool、newfixedthreadpool、newsinglethreadexecutor、newschedulethreadpool。

這四種執行緒池本質上也是threadpoolexecutor,只是這些引數都是固定好了的,我們可以直接使用。

public static executorservice newcachedthreadpool(threadfactory threadfactory)

建立乙個可快取執行緒池,如果執行緒長度超過處理需要,可靈活**空閒執行緒,若無可**,則新建執行緒。

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

適合於耗時短,不需要考慮同步的場合。

public static executorservice newfixedthreadpool(int nthreads, threadfactory threadfactory)

建立乙個指定工作執行緒數量的執行緒池。每當提交乙個任務就建立乙個執行緒,如果工作執行緒數量達到執行緒池初始的最大數,則將提交的任務存入到執行緒池池佇列中

fixedthreadpool是乙個典型且優秀的執行緒池,它具有執行緒池提高程式效率和節省建立執行緒時所耗的開銷的優點。但是,**程池空閒時,即執行緒池中沒有可執行任務時,它不會釋放工作執行緒,還會占用一定的系統資源。

符合常用場合

public static executorservice newsinglethreadexecutor(threadfactory threadfactory) 乙個單執行緒的執行緒池,只有乙個執行緒在工作(如果這個唯一的執行緒因為異常結束,那麼會有乙個新的執行緒來替代它。)能夠保證所有任務的執行順序按照任務的提交順序執行,同一時段只有乙個任務在執行。

適合於需要保證執行順序的場合

public static scheduledexecutorservice newscheduledthreadpool(int corepoolsize) 建立乙個定長的執行緒池,而且支援定時的以及週期性的任務執行。

可定時執行(初始延時),執行頻率(每隔多長時間執行,還是執行成功一次之後再隔多長時間再執行)的執行緒池

適合定時以及週期性執行任務的場合。

四種執行緒池

其他執行緒池 核心執行緒 執行緒池大小 佇列策略 newcachedthreadpool integer.max value synchronousqueue newfixedthreadpool 建立時可以設定引數 建立時可以設定引數 linkedblockingqueue newschedule...

四種執行緒池

threadpoolexecutor的引數 int coresize,核心執行緒 int maxsize,最大執行緒 long time,空閒執行緒超時時間,超時後銷毀 timeunit 空閒時間單位 blockingqueue taskqueue,存放任務的佇列,threadfactory thr...

android四種執行緒池

cachedthreadpool 可快取的執行緒池,如果執行緒池有空閒執行緒則復用空閒執行緒,如沒有空閒執行緒則建立執行緒 執行緒數沒有限制 執行緒執行超時則銷毀 引數部分看原始碼也很簡單 fixedthreadpool 有執行緒數量限制,如果執行緒數小於最大執行緒數,則無論有沒有空閒執行緒都會建立...