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>());