(1)重用執行緒,避免執行緒建立和消耗帶來的效能消耗
(2)控制線程池的最大併發數,避免執行緒之間搶系統資源而導致的阻塞現象。
(3)對執行緒管理,提供定時執行等功能。
1、executor介面:
public inte***ce executor
將任務提交和執行解耦,引數傳入runnable(任務),通過execute方法進行任務執行。
2、threadpoolexcutor:
執行緒池核心實現類:
public class threadpoolexecutor extends abstractexecutorservice
4、執行緒池處理流程:
executors類提供了建立常見執行緒的方法,主要有四種,fixedthreadpool、cachedthreadpool、singlethreadexecutor和scheduledthreadpool。
1、fixedthreadpool
public static executorservice newfixedthreadpool(int nthreads)
可以指定核心執行緒數和最大執行緒數。也就是說只有核心執行緒數,並且執行緒不會被銷毀。任務佇列採用的是linkedblockingqueue無界阻塞佇列。
流程圖:
(1)執行execute提交任務,如執行緒數小於核心執行緒數,則建立核心執行緒並執行任務。否則加入阻塞佇列。
(2)核心執行緒如果執行完當前任務,會在佇列中取任務並執行。
2、cachedthreadpool
public static executorservice newcachedthreadpool()
核心執行緒數為0,最大執行緒數為integer.max_value,空閒執行緒等待時長位60秒。使用的阻塞隊列為synchronousqueue,該佇列不儲存元素,每個插入操作必須等另乙個執行緒的移除操作,每個移除操作必須等待另乙個執行緒的插入操作。
適用於少量的幾個任務的場景。
流程圖:
(1)執行execute提交任務,插入synchronousqueue佇列,同時判斷是否有空閒執行緒,如有則將任務交給空閒執行緒去取任務處理;如果沒有,則建立非核心執行緒去處理任務(從佇列移除)。如果超過60秒無任務,空閒執行緒會被**。
適用於大量任務,並且耗時不多的場景。
3、singlethreadexecutor
public static executorservice newsinglethreadexecutor()
只有乙個核心執行緒的執行緒池。採用的阻塞隊列為linkedblockingqueue。
流程圖:
(1)執行execute提交任務,如無核心執行緒,建立乙個核心執行緒執行任務;如有執行緒在執行,則將任務加入到佇列,等核心執行緒處理完當前任務,再從佇列中取任務處理。
適用於多工有序進行的場景。
4、scheduledthreadpool
public static scheduledexecutorservice newscheduledthreadpool(int corepoolsize)
public scheduledthreadpoolexecutor(int corepoolsize)
固定的核心執行緒數,最大執行緒數為integer.max_value,隊列為delayedworkqueue可延時獲取資料的無界阻塞佇列,所以不會建立非核心執行緒。
返回了scheduledthreadpoolexecutor物件,主要用來執行延時任務或定期任務。
流程圖:
(1)執行scheduleatfixedrate或schedulewithfxieddelay方法,執行週期性任務或者延時任務時,將任務新增到佇列中。並且檢查是否達到了核心執行緒數,沒達到就建立核心執行緒。
(2)delayedworkqueue將任務進行排序,核心執行緒會在佇列中取到任務的包裝類scheduledfuturetask,然後去執行任務。
適用於執行週期任務或延時任務。
執行緒池 基礎
概念 乙個執行緒的宣告週期中包含了三個時間段,1是建立執行緒的時間 t1,2是執行緒執行任務所要花費的時間 t2,3是執行緒銷毀的時間 t3,執行緒池主要技術點就是縮短或調整t1和t3的時間,從而提高伺服器的效能。因為它把t1和t3安排在程式啟動或者伺服器空閒的時間段中,這樣就不會有t1和t3的開銷...
執行緒池01 執行緒池基礎知識
執行緒池的執行邏輯如下 核心引數 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,blockingqueueworkqueue,threadfactory ...
執行緒池基礎 ThreadPool基礎
池 pool 是乙個很常見的提高效能的方式。比如執行緒池連線池等,之所以有這些池是因為執行緒和資料庫連線的建立和關閉是一種比較昂貴的行為。對於這種昂貴的資源我們往往會考慮在乙個池容器中放置一些資源,在用的時候去拿,在不夠的時候添點,在用完就歸還,這樣就可以避免不斷的建立資源和銷毀資源。如果您做過相關...