多執行緒計算的出現大大提高了程式的處理效能.但是過多的執行緒一定會帶來執行緒資源排程的損耗(如建立和**執行緒).這樣就會導致程式的響應速度.為了實現合理的執行緒操作.就需要提高執行緒的可管理性.並降低資源損耗.所在在juc中提出了執行緒池的概念,執行緒池的建立可以通過executors類完成.
一:::executors類能搞建立的執行緒池一共有4種.:
1.cachethreadpool(快取執行緒池):執行緒池中的每個子執行緒都可以進行重用.儲存了所有的使用者執行緒.並且隨著處理量的增加可以進行使用者執行緒的建立.
2.fixedthreadpool(固定大小執行緒池):儲存所有的核心執行緒,這些核心執行緒可以不斷被重用.並且不保留使用者執行緒.
3.singlethreadpool(單執行緒池):只維護乙個核心執行緒.所有執行者依據順序獲取執行緒資源.
4.schedulethreadpool(定時排程執行緒池):按照計畫定時完成執行緒中的任務.包含核心執行緒和使用者執行緒.可以提供有許多的使用者執行緒.
二:::關於使用者執行緒與核心執行緒的區別:
多執行緒的實現本身依賴於作業系統.但同時也依賴於所使用的平台.使用者執行緒和核心執行緒的區別如下:
1.使用者執行緒可以在不支援多線的系統中存在.核心執行緒需要作業系統和硬體的支援.
2.在只要使用者執行緒的系統中.cpu排程依然以程序為單位.處於執行中的多個執行緒是通過程式實現輪換的.而在有內支援的核心執行緒中.cpu排程以執行緒為單位.並由作業系統排程
3.使用者執行緒通過程序劃分.乙個程序系統只會為其分配乙個處理器.所以使用者執行緒無法呼叫系統的多核處理器.而核心執行緒可以排程乙個程式在多核處理器上執行,提高處理效能.
4.使用者執行緒執行系統指令呼叫時將導致其所屬程序被中斷,而核心執行緒執行系統指令呼叫時,只導致該執行緒被中斷.
三:::建立執行緒池
public
class
jucdemo);
}//關閉執行緒
service.
shutdown()
;}}
cachethreadpool建立的執行緒池由於沒有設定長度限制.所以只要執行緒池中的執行緒不夠用,則會自動建立新的執行緒.而執行緒的數量最多不會超過integer.max_value(2147483647)個;
fixedthreadpool建立固定長度的執行緒池.這樣所以執行的的執行緒將輪流搶占這個有限的執行緒.
singlethreadpool建立單執行緒池.所有子執行緒將依照順序獲取此執行緒並執行操作.
四:::建立排程執行緒池
public
class
jucdemo2},
3,2, timeunit.seconds);}
}}
在schedulexecutorservice.scheduleatfixedrate放中,傳入callable例項介面,啟動3秒後,並且每隔2秒執行能給一次執行緒任務;那麼也可以利用future介面獲取執行緒的返回結果,在executorservice介面中提供invokeany()與invokeall()兩個方法可以實現一組callable例項的執行;
public
class
jucdemo3);
}//建立定長線程池
executorservice service = executors.
newfixedthreadpool(3
);//執行執行緒物件
list
> result = service.
invokeall
(allthread)
;for
(future
stringfuture : result)
}}
輸出結果:
pool-
1-thread-
1數量:
2pool-
1-thread-
2數量:
0pool-
1-thread-
3數量:
4pool-
1-thread-
2數量:
1pool-
1-thread-
3數量:
3
通過set集合儲存了多個執行執行緒.由於只開闢了乙個定長為3的執行緒池.這些集合中的執行緒將依次進行執行緒資源的搶占並執行.程式通過invokeall方法同時執行了集合中線程的返回結果. 多執行緒之執行緒池
執行緒框架關係 executor 介面 executorservice 介面 繼承 executor abstractexecutorservice 抽象類 實現 executorservice threadpoolexecutor 繼承abstractexecutorservice 過載一系列方法...
多執行緒之執行緒池
首先說一說執行緒池的優點 方便管理,監控執行緒狀態 提高執行緒響應速度 執行緒可以重複使用 executorservice普通排程池核心介面 submit runnable callable future execute runnable void 執行緒池工作流程 當任務到達執行緒池時的工作順序,...
JAVA多執行緒之 執行緒池
執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...