executors:jdk1.5之後的乙個新類,提供了一些靜態工廠,生成一些常用的執行緒池
,threadpoolexecutor是executors類的底層實現
1.newsinglethreadexecutor
建立乙個單執行緒的執行緒池。這個執行緒池只有乙個執行緒在工作,也就是相當於單執行緒序列執行》所有任務。如果這個唯一的執行緒因為異常結束,那麼會有乙個新的執行緒來替代它。此執行緒池》保證所有任務的執行順序按照任務的提交順序執行。2.newfixedthreadpool
建立固定大小的執行緒池。每次提交乙個任務就建立乙個執行緒,直到執行緒達到執行緒池的最大大小。執行緒池的大小一旦達到最大值就會保持不變,如果某個執行緒因為執行異常而結束,那麼執行緒池會補充乙個新執行緒。3.newcachedthreadpool
建立乙個可快取的執行緒池。如果執行緒池的大小超過了處理任務所需要的執行緒,4.newscheduledthreadpool那麼就會**部分空閒(60秒不執行任務)的執行緒,當任務數增加時,此執行緒池又可以智慧型的新增新執行緒來處理任務。此執行緒池不會對執行緒池大小做限制,執行緒池大小完全依賴於作業系統(或者說jvm)能夠建立的最大執行緒大小。
建立乙個大小無限的執行緒池。此執行緒池支援定時以及週期性執行任務的需求。
//構造方法
public threadpoolexecutor(int corepoolsize,//核心池的大小
int maximumpoolsize,//執行緒池最大執行緒數
long keepalivetime,//保持時間
timeunit unit,//時間單位
blockingqueueworkqueue,//任務佇列
threadfactory threadfactory,//執行緒工廠
rejectedexecutionhandler handler) //異常的捕捉器
如果當前執行緒池中的執行緒數目小於corepoolsize,則每來乙個任務,就會建立執行這個任務;
如果當前執行緒池中的執行緒數目》=corepoolsize,則每來乙個任務,會嘗試將其新增到任務快取佇列當中
若新增成功,則該任務會等待空閒執行緒將其取出去執行;
若新增失敗(一般來說是任務快取佇列已滿),則會嘗試建立新的執行緒去執行這個任務;
如果當前執行緒池中的執行緒數目達到maximumpoolsize,則會採取任務拒絕策略進行處理;
如果執行緒池中的執行緒數量大於 corepoolsize時,如果某執行緒空閒時間超過keepalivetime,執行緒將被終止,直至執行緒池中的執行緒數目不大於corepoolsize;如果允許為核心池中的執行緒設定存活時間,那麼核心池中的執行緒空閒時間超過keepalivetime,執行緒也會被終止。
假如有乙個工廠,工廠裡面有10(corepoolsize
)個工人,每個工人同時只能做一件任務。
因此只要當10個工人中有工人是空閒的,來了任務就分配
給空閒的工人做;
當10個工人都有任務在做時,如果還來了任務,就把任務進行排隊等待(任務佇列
);
如果說新任務數目增長的速度遠遠大於工人做任務的速度,那麼此時工廠主管可能會想補救措施,比如重新招4個臨時工人(建立新執行緒
)進來;然後就將任務也分配給這4個臨時工人做;
如果說著14個工人做任務的速度還是不夠,此時工廠主管可能就要考慮不再接收新的任務或者拋棄前面的一些任務了(拒絕執行
)。
當這14個工人當中有人空閒時,而且空閒超過一定時間(空閒時間
),新任務增長的速度又比較緩慢,工廠主管可能就考慮辭掉4個臨時工了,只保持原來的10個工人,畢竟請額外的工人是要花錢的
阻塞佇列,如果blockingqueue是空的,從blockingqueue取東西的操作將會被阻斷進入等待狀態,直到blockingqueue進了東西才會被喚醒,同樣,如果blockingqueue是滿的,任何試圖往裡存東西的操作也會被阻斷進入等待狀態,直到blockingqueue裡有空間時才會被喚醒繼續操作。
基礎api介紹
從佇列中取元素的方法
子類介紹
執行緒池小結
生產者消費者模型 執行緒池簡單實現 首先按照國際慣例先上概念,概念來自維基百科 執行緒池 英語 thread pool 一種執行緒使用模式。執行緒過多會帶來排程開銷,進而影響快取區域性性和整體效能。而執行緒池維護著多個執行緒,等待著監督管理者分配可併發執行的任務。這避免了在處理短時間任務時建立與銷毀...
執行緒與執行緒池(一)
一.執行緒 當執行緒物件對建立後,即進入了新建狀態,如 thread t new mythread 就緒狀態 runnable 當呼叫執行緒物件的start 方法 t.start 執行緒即進入就緒狀態。處於就緒狀態的執行緒,只是說明此執行緒已經做好了準備,隨時等待cpu排程執行,並不是說執行了t.s...
執行緒池系列 一 執行緒池簡介
執行緒池主要解決了倆個問題 一是避免了頻繁建立銷毀執行緒所帶來的開銷,達到了執行緒復用的目的 二是執行緒池提供了一種資源限制和管理的手段,使用者可以通過一些引數來定製化執行緒 public class threadpoolexecutor extends abstractexecutorservic...