首先說一說執行緒池的優點:
方便管理,監控執行緒狀態
提高執行緒響應速度
執行緒可以重複使用
executorservice普通排程池核心介面
- submit(runnable||callable):future
- execute(runnable):void
執行緒池工作流程:當任務到達執行緒池時的工作順序,首先補充下面概念:
- 核心執行緒池corepool size
- 阻塞佇列blockingqueue
- 最大執行緒池maxiumpoolsize
- 拒絕策略rejecthandler
然後是工作順序:
1.若核心池未滿,則建立新的執行緒執行任務而後將此執行緒入核心池
-若核心池滿且有空閒執行緒,排程空閒執行緒執行任務。
2.將任務置入阻塞佇列,排隊等待空閒執行緒排程(juc)
-arrayblockingqueue:基於陣列的有界阻塞佇列
-linkedblockingqueue:基於鍊錶的無界阻塞佇列
-synchrousqueue:不儲存元素的無界阻塞佇列
3.當阻塞佇列滿時,若此時最大執行緒池未滿,建立新執行緒執行任務而後置入最大執行緒池中
4.若最大執行緒池已滿,呼叫相應拒絕策略處理任務(預設為丟擲異常且不處理任務)
手工建立執行緒池 new threadpoolexecutor()
public threadpoolexecutor(int corepoolsize,
int maximumpoolsize,
long keepalivetime,
timeunit unit,
blockingqueue workqueue)
手工建立執行緒池執行callable任務
thread 類執行callable futuretask
futuretask類保證多執行緒場景下任務只會被執行一次
future get()會阻塞當前執行緒直到取得callable的返回值
jdk內建4大執行緒池
應用場景:當伺服器負載較重時,限制執行緒產生數量,可採用固定大小執行緒池
應用場景:某些需要同步處理的場合(任務需要按需處理)
synchronousqueue:不儲存元素。入,出對操作必須同時呼叫,
當提交任務速度》執行任務速度:會不代表建立新執行緒執行任務,記憶體可能會寫滿
當提交任務速度《執行任務速度:固定幾個執行緒來處理
多執行緒之執行緒池
執行緒框架關係 executor 介面 executorservice 介面 繼承 executor abstractexecutorservice 抽象類 實現 executorservice threadpoolexecutor 繼承abstractexecutorservice 過載一系列方法...
JAVA多執行緒之 執行緒池
執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...
javaSE 多執行緒之執行緒池
1 使用語法 publicstaticvoiduseexecutorservice executorservice shutdown 輸出 pool 1 thread 3 pool 1 thread 2 pool 1 thread 1 pool 1 thread 3 pool 1 thread 2 ...