ThreadPoolExecutor的幾個參數理解

new ThreadPoolExecutor(ui

int coreSize,線程

int maxSize,隊列

long time,int timeUnit,it

BlockingQueue<Runnable> taskQueue,io

ThreadFactory  threadFactory):thread

參數含義以下:線程池

coreSize:核心線程數im

maxSize :線程最大數時間

time,timeUnit:空閒線程超時時間,超時後線程銷燬co

taskQueue:存聽任務的隊列

threadFactory:建立線程的線程工廠

1.當線程池中的線程數沒有達到coreSize時,提交一個任務,不論此時有沒有線程處於空閒狀態,則會建立一個新的線程!

2.當線程數達到coseSize時,此時在提交任務,若是有線程空閒,則執行任務,若是沒有空閒,則放入taskQueue中等待被執行。

3.當taskQueue隊列中放滿任務時,若是此時全部的線程都處於執行任務期間,再次提交任務,則會建立一個新線程,用於執行隊列中的任務,當線程數達到maxSize的時候,若是再次提交任務,若是任務隊列已滿,而且全部的線程處於活動期間,則提交任務失敗,拋出RejectExecutionException.

總之,若是沒有設置quitCore=true,核心線程不會被銷燬,在線程數達到coreSize以前,每次提交任務都會建立新線程。

線程數達到coreSize後,提交任務會使用空閒線程執行,若是沒有空閒線程,則會放到任務隊列taskQueue中,等待被執行!

若是隊列滿了,全部coreSize線程都處於executing task的狀態,則會建立一個新線程用於執行隊列中的任務。

能夠根據幾個參數含有,設定具體場景的線程池,Executors中有幾個經常使用的線程池以下:

FixedThreadPool(

          特色:1每個線程都是核心線程,不設置quitCore=true時,每一個線程都不會被銷燬):

           new ThreadPoolExecutor(threadSize,threadSize,0,TimeUnit.Seconds,new LinkedBlockingQueue<Runnable>());

CachedThreadPool (

                特色:1.沒有核心線程,全部線程空閒60秒後銷燬

                           2.無邊界,無論提交多少任務,都有線程去馬上執行,充分利用了SynchronousQueue容量爲0的特色)

           new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L,TimeUnit.Seconds,new SynchronousQueue<Runnable>());

SingleThreadPool(

                     特色:只有一個核心線程,即按照任務提交的順序,串行執行任務

              new ThreadPoolExecutor(1,1,0L,TimeUnit.Seconds,new LinkedBlockingQueue<Runnable>());

ScheduledThreadPool:

          特色是:核心線程數固定,無最大邊界,非核心線程空閒即銷燬,可延時執行任務

new ScheduledThreadPoolExecutor(coreSize,Integer.MAX_VALUE,0L,TimeUnit.Seconds,new DelayedWorkQueue<Runnable>());

相關文章
相關標籤/搜索