重用執行緒池中的執行緒,避免因為執行緒的建立和銷毀帶來的效能開銷。
能有效控制線程池的最大併發數,避免大量的執行緒之間因互相搶占系統資源而導致的阻塞現象。
能夠對執行緒進行簡單的管理,並提供定時執行的以及指定間隔迴圈執行等功能
。threadpoolexecutor是執行緒池的真正實現,它的構造方法提供了一系列引數來配置執行緒,構造方法如下:
public
threadpoolexecutor
(int corepoolsize,
int maximumpoolsize,
long keepalivetime,
timeunit unit,
blockingqueue
workqueue,
threadfactory threadfactory,
rejectedexecutionhandler handler)
引數說明
maximumpoolsize
執行緒池所能容納的最大執行緒數,當執行緒數達到該值時,新任務會被阻塞
keepalivetime
非核心執行緒閒置時的超時時長,超過這個時長,非核心執行緒會被**。
unit
指定keepalivetime的時間單位,可選有timeunit.milliseconds(毫秒)、timeunit.seconds(秒)、timeunit.minutes(分鐘)。
workqueue
執行緒池中的任務佇列,通過執行緒池的execute方法提交的runnable物件會儲存在這個引數中。
threadexecutepool執行任務時,大致遵循下面規則:
如果執行緒池中的執行緒數量未達到核心執行緒的數量,那麼會直接啟動乙個核心執行緒來執行任務。
如果執行緒池中的執行緒數量已經達到或超過核心執行緒的數量,那麼任務會被插入到任務佇列中排隊等待執行。
如果任務佇列滿,無法插入新任務,執行緒數量未達到執行緒池規定最大值,那麼會立即啟動乙個非核心執行緒來執行任務。
如果步驟3中線程數量達到最大值,則拒絕新任務。
fixedthreadpool
executor executor = executors.
newfixedthreadpool(3
);//引數為執行緒數
它是一種執行緒數量固定的執行緒池,當執行緒處於空閒狀態時,它們不會被**,除非關閉執行緒池。
因為它只有核心執行緒且不會被**,這意味著它能更快地響應外界請求。
cachedthreadpool
executor executor1 = executors.
newcachedthreadpool()
;
它是一種執行緒數量不定的執行緒池,它只有非核心執行緒,最大執行緒數為integer.max_value。當執行緒池中的執行緒都處於活動狀態時,會建立新的執行緒來處理新任務,否則會利用空閒執行緒處理新任務。超過60s,空閒執行緒會被**。
schedulethreadpool
executor executor2= executors.
newscheduledthreadpool(3
);//核心執行緒數
它的核心執行緒固定的,非核心執行緒是沒有限制的,即maximumpoolsize為integer.max_value,非核心執行緒空閒時會立即**,主要用於執行定時任務和具有固定週期的任務。
singlethreadpool
executor executor3 = executors.
newsinglethreadexecutor()
;
該執行緒內部只有乙個核心執行緒,它確保所有任務都在同乙個執行緒中按順序執行。singlethreadpool的意義在一同意所有的外界任務到同乙個執行緒中,使得這些任務不需要處理執行緒同步的問題。
其它執行緒
可以通過改變threadpoolexecutor的引數按需求構造你的執行緒。
Android 執行緒池的說明與使用
blockingqueue的實現都是執行緒安全的,子類如下 synchronousqueue linkedblockingqueue linkedblockingdeque arrayblockingqueue delayqueue priorityblockingqueue。synchronous...
Android執行緒池的使用
一 執行緒池介紹 1.1原理 executor是乙個介面,只有乙個方法void execute runnable command 真正的執行緒的實現為threadpoolexecutor。threadpoolexecutor繼承了abstractexecutorservice,abstractexe...
Android執行緒池的使用
一 執行緒池的優點 說到執行緒池的優點就要先說一下不用執行緒池的壞處 使用執行緒池的好處 二 執行緒池的使用 1.執行緒池的引數 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,tim...