多執行緒之執行緒池

2021-09-26 06:43:20 字數 1215 閱讀 2609

首先說一說執行緒池的優點:

方便管理,監控執行緒狀態

提高執行緒響應速度

執行緒可以重複使用

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 ...