谷歌封裝好的的執行緒池工具類,jdk1.5加入,內部其實是封裝了threadpoolexecutor的實現物件,可以當成是一種裝飾模式。newcachedthreadpool 建立乙個可快取的執行緒池,如果執行緒池長度超過處理需要,可靈活**空閒執行緒,若無法**,則新建執行緒。
newfixedthreadpool 建立乙個定長線程池,可控制線程最大併發數,超出的執行緒會在佇列中等待。
newscheduledthreadpool 建立乙個定長線程池,支援定時及週期性任務執行。
newsingletheadexecutor 建立乙個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序執行。
//有參構造
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個工人,畢竟請額外的工人是要花錢的
public class threadmanager
public static threadpoolproxy getdownloadpool()
public static class threadpoolproxy
private void initpool()
}/**
* 執行任務
* @param task
*/public void execute(runnable task)
public future> submit(runnable task)
public void remove(runnable task) }}
執行緒池入門
1.阻塞佇列 體系結構 collection queue blockqueue 重要的實現類 1.arrayblockingqueue 底層是陣列 2.linkedblockingqueue 底層是鍊錶 預設長度是 21 億 3.synchronousqueue 裡邊只能存放乙個 2.執行緒池 核心...
C 執行緒 入門 優化執行緒池
優化執行緒池 執行緒池從其池中的乙個執行緒開始。分配任務後,池管理器會 注入 新執行緒以應對額外的併發工作負載 最大限制 在足夠長時間的不活動之後,如果池管理器懷疑這樣做會導致更好的吞吐量,則可以 退出 執行緒。您可以通過呼叫threadpool.setmaxthreads 來設定池將建立的執行緒的...
快速了解java執行緒池
1.newcachedthreadpool 快取執行緒池 執行緒數量不固定,需要的時候建立新執行緒,靈活 不用的執行緒。優先使用不用的執行緒來避免每次建立新執行緒。2.newfixedthreadpool 固定執行緒池 執行緒數量固定,超出執行緒數量的任務需要等待。3.newscheduledthr...