首先執行緒這個概念就不多講了,相信大家都比較熟悉,一般在處理耗時任務的時候我們習慣
newthread
來建立乙個子執行緒去處理,但是當任務多的時候不可能每乙個任務都去建立乙個任務,會造成系統頻繁的建立和銷毀,占用大量的資源造成介面的卡頓,甚至可能會出現記憶體異常的問題,所以為了解決這個問題我們需要乙個統一管理執行緒的工具 -
執行緒池。使用執行緒池對多工執行緒進行統一管理,對資源進行合理分配,避免不合理的資源占用,對執行緒進行復用(這個是重點),所謂復用就是執行緒執行完不會立刻銷毀,會等待另外的任務,這樣就不會出現頻繁的建立和銷毀了。
1.執行緒池的建立先來了解一下基本的構造引數
public threadpoolexecutor(int corepoolsize, int maximumpoolsize, long keepalivetime, timeunit unit, blockingqueueworkqueue)
corepoolsize: 執行緒池中核心執行緒數。
maximumpoolsize: 執行緒池中最大執行緒數。
keepalivetime:非核心執行緒閒置時的超時時長,超過這個時長,非核心執行緒就會被**
unit:上面時間屬性的單位
workqueue:執行緒池中的任務佇列,通過執行緒池的
execute:方法提交的
runnable:物件會儲存在這個引數中。
threadfactory:執行緒工廠,可用於設定執行緒名字等等,一般無須設定該引數。
2. android中的四類執行緒池
2.1 fixthreadpool
fixthreadpool只有核心執行緒,且數量固定,不會被**,執行緒都在執行時後面的任務會被等待
建構函式
public static executorservice newfixedthreadpool(int nthreads)
執行示例
public void excutefixthreadpool()
2.2 singlethreadpool
singlethreadpool只有乙個核心執行緒,所有任務都在同一執行緒中按順序執行,先進先出
建構函式
public static executorservice newsinglethreadexecutor(threadfactory threadfactory)
執行示例
public void excutesinglethreadpool()
2.3 cachedthreadpool
cachedthreadpool沒有核心執行緒,只有費核心執行緒,新任務會建立新執行緒,執行緒空閒超過指定時間會被**,比較適合執行大量的耗時較少的任務。
建構函式
public static executorservice newcachedthreadpool()
執行示例
public void excutecachedthreadpool()
2.4 scheduledthreadpool
從字面上看大概就知道是執行定時任務的執行緒管理,核心執行緒數固定,非核心執行緒(閒著沒活乾會被立即**)數沒有限制。
建構函式
public static scheduledexecutorservice newscheduledthreadpool(int corepoolsize)
執行示例
public void excutescheduledthreadpool ()
我個人在專案中有乙個需求就是在第一次進入主介面時需要在服務端同時拉多份資料儲存在本地,且資料都是比較大比較耗時的任務,如果乙個乙個執行需要等待較長時間,使用者體驗實在較差,所以採用執行緒池進行管理,同時執行多個任務,由執行緒池進行管理,這樣任務處理是並行的,等待時間較短,使用者體驗提公升。
Android面試 談談執行緒池的原理
執行緒池有什麼好處,我們怎麼更好的使用它 回答問題三步走 執行緒池是用來幹嘛的?執行緒池是怎麼實現的,核心原理 執行緒池有什麼好處,我們怎麼更好的使用它 如果併發的執行緒數量很多,並且每個執行緒都是執行乙個時間很短的任務就結束了,這樣頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷毀執行...
Android中線程池的原理和應用
執行緒池原理public class threadpool 要開啟的執行緒內情況 1 判斷runnable集合大小,不為空,取出來那個非同步任務 3 任務集合為空,即任務都執行完了,此時執行緒等待 private void createthread else start 執行緒池應用 寫個工具類th...
Android執行緒池
executors jdk1.5之後的乙個新類,提供了一些靜態工廠,生成一些常用的執行緒池,threadpoolexecutor是executors類的底層實現 1.newsinglethreadexecutor 建立乙個單執行緒的執行緒池。這個執行緒池只有乙個執行緒在工作,也就是相當於單執行緒序列...