Android執行緒池

2021-07-11 09:20:40 字數 2252 閱讀 1989

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(corepoolsize)個工人,每個工人同時只能做一件任務。

因此只要當10個工人中有工人是空閒的,來了任務就分配給空閒的工人做;

當10個工人都有任務在做時,如果還來了任務,就把任務進行排隊等待(任務佇列);

如果說新任務數目增長的速度遠遠大於工人做任務的速度,那麼此時工廠主管可能會想補救措施,比如重新招4個臨時工人(建立新執行緒)進來;然後就將任務也分配給這4個臨時工人做;

如果說著14個工人做任務的速度還是不夠,此時工廠主管可能就要考慮不再接收新的任務或者拋棄前面的一些任務了(拒絕執行)。

當這14個工人當中有人空閒時,而且空閒超過一定時間(空閒時間),新任務增長的速度又比較緩慢,工廠主管可能就考慮辭掉4個臨時工了,只保持原來的10個工人,畢竟請額外的工人是要花錢的

阻塞佇列,如果blockingqueue是空的,從blockingqueue取東西的操作將會被阻斷進入等待狀態,直到blockingqueue進了東西才會被喚醒,同樣,如果blockingqueue是滿的,任何試圖往裡存東西的操作也會被阻斷進入等待狀態,直到blockingqueue裡有空間時才會被喚醒繼續操作。

基礎api介紹

從佇列中取元素的方法

子類介紹

Android 執行緒池

threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit blockingqueueworkqueue,threadfactory threadfactory corepoolsi...

Android 執行緒池

適用於android的執行緒池 工具類 author yawei public class public executorservice diskio,executorservice networkio,executor mainthread,scheduledexecutorservice sch...

Android執行緒池詳解

最近在看okhttp的原始碼,看著看著就看到了有執行緒池的地方,以前自己對這個東西就也就感到雲裡霧裡的,所以 想把執行緒池的知識點和原始碼完整的看一篇 1.執行緒池有什麼用?a.重用執行緒池中存在的執行緒,避免因為執行緒的大量建立和銷毀所帶來的效能開銷 完成一項任務的時間t 建立線 2.thread...