executors:jdk1.5之後的乙個新類,提供了一些靜態工廠,生成一些常用的執行緒池
,threadpoolexecutor是executors類的底層實現
1.newsinglethreadexecutor
建立乙個單執行緒的執行緒池。這個執行緒池只有乙個執行緒在工作,也就是相當於單執行緒序列執行》所有任務。如果這個唯一的執行緒因為異常結束,那麼會有乙個新的執行緒來替代它。此執行緒池》保證所有任務的執行順序按照任務的提交順序執行。2.newfixedthreadpool
建立固定大小的執行緒池。每次提交乙個任務就建立乙個執行緒,直到執行緒達到執行緒池的最大大小。執行緒池的大小一旦達到最大值就會保持不變,如果某個執行緒因為執行異常而結束,那麼執行緒池會補充乙個新執行緒。3.newcachedthreadpool
建立乙個可快取的執行緒池。如果執行緒池的大小超過了處理任務所需要的執行緒, 那麼就會**部分空閒(60秒不執行任務)的執行緒,當任務數增加時,此執行緒池又可以智慧型的新增新執行緒來處理任務。此執行緒池不會對執行緒池大小做限制,執行緒池大小完全依賴於作業系統(或者說jvm)能夠建立的最大執行緒大小。4.newscheduledthreadpool
建立乙個大小無限的執行緒池。此執行緒池支援定時以及週期性執行任務的需求。
//構造方法
public threadpoolexecutor(int corepoolsize,//核心池的大小
int maximumpoolsize,//執行緒池最大執行緒數
long keepalivetime,//保持時間
timeunit unit,//時間單位
blockingqueueworkqueue,//任務佇列
threadfactory threadfactory,//執行緒工廠
rejectedexecutionhandler handler) //異常的捕捉器
如果當前執行緒池中的執行緒數目小於corepoolsize,則每來乙個任務,就會建立執行這個任務;
如果當前執行緒池中的執行緒數目》=corepoolsize,則每來乙個任務,會嘗試將其新增到任務快取佇列當中
若新增成功,則該任務會等待空閒執行緒將其取出去執行;
若新增失敗(一般來說是任務快取佇列已滿),則會嘗試建立新的執行緒去執行這個任務;
如果當前執行緒池中的執行緒數目達到maximumpoolsize,則會採取任務拒絕策略進行處理;
如果執行緒池中的執行緒數量大於 corepoolsize時,如果某執行緒空閒時間超過keepalivetime,執行緒將被終止,直至執行緒池中的執行緒數目不大於corepoolsize;如果允許為核心池中的執行緒設定存活時間,那麼核心池中的執行緒空閒時間超過keepalivetime,執行緒也會被終止。
假如有乙個工廠,工廠裡面有10(阻塞佇列,如果blockingqueue是空的,從blockingqueue取東西的操作將會被阻斷進入等待狀態,直到blockingqueue進了東西才會被喚醒,同樣,如果blockingqueue是滿的,任何試圖往裡存東西的操作也會被阻斷進入等待狀態,直到blockingqueue裡有空間時才會被喚醒繼續操作。corepoolsize
)個工人,每個工人同時只能做一件任務。因此只要當10個工人中有工人是空閒的,
來了任務就分配
給空閒的工人做;當10個工人都有任務在做時,如果還來了任務,就把任務進行排隊等待(
任務佇列
);如果說新任務數目增長的速度遠遠大於工人做任務的速度,那麼此時工廠主管可能會想補救措施,比如重新招4個臨時工人(
建立新執行緒
)進來;然後就將任務也分配給這4個臨時工人做;如果說著14個工人做任務的速度還是不夠,此時工廠主管可能就要考慮不再接收新的任務或者拋棄前面的一些任務了(
拒絕執行
)。當這14個工人當中有人空閒時,而且空閒超過一定時間(
空閒時間
),新任務增長的速度又比較緩慢,工廠主管可能就考慮辭掉4個臨時工了,只保持原來的10個工人,畢竟請額外的工人是要花錢的
基礎api介紹
從佇列中取元素的方法
子類介紹
kmp從入門到放棄
標籤 kmp 擴充套件kmp 給你兩個字串,你需要回答,b串是否是a串的子串 a串是否包含b串 a aaaaaaaaaaaaaaaaaaaaaaaaaab b aaaaaaaab 最壞狀態 o mn 一般做法 for 列舉b在a串中的起始位置 for 向後比較ab是否相等 o n m 傳說中的kmp...
beego 從入門到放棄
beego 的專案基本都是通過 bee命令來建立的,所以在建立專案之前確保你已經安裝了 bee 工具和 beego。如果你還沒有安裝,那麼請查閱 beego 的安裝 和 bee 工具的安裝 現在一切就緒我們就可以開始建立專案了,開啟終端,進入 gopath src 所在的目錄 建立乙個專案名為201...
Flutter從入門到放棄
本篇主要記錄下flutter的學習路線。一 認識flutter 可以檢視這些文章 二 dart語言 1 認識dart語言 2 學習 從2018.02開始出現dart2,屬於強型別語言。介紹位址參考 三 開始flutter 網上也有很多部落格介紹了flutter怎麼安裝,但大多介紹不全,第一次安裝難免...