您好,登錄后才能下訂單哦!
如何在Android中使用ThreadPoolExecutor線程池?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Android中的線程池ThreadPoolExecutor解決了單線程下載數據的效率慢和線程阻塞的的問題,它的應用也是優化實現的方式。所以它的重要性不言而喻,但是它的復雜性也大,理解上可能會有問題,不過作為安卓工程師,了解這個也是必然的。
ThreadPoolExecutor有幾個構造函數,最多參數的構造函數最常用,下面會詳細介紹各個參數的含義及其幾個參數之間的關系:
<span >ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler)</span>
各個參數的含義:
corePoolSize
: 核心線程數,能夠同時執行的任務數量
maximumPoolSize
:除去緩沖隊列中等待的任務,最大能容納的任務數(其實是包括了核心線程池數量)
keepAliveTime
:超出workQueue的等待任務的存活時間maximumPoolSize放置的一個線程的存活時間
unit
:時間單位
workQueue
:阻塞等待線程的隊列,一般使用new LinkedBlockingQueue<Runnable>()
這個,如果不指定容量, 會一直往里邊添加,沒有限制,workQueue永遠不會滿;
threadFactory
:創建線程的工廠,使用系統默認的類
handler
:當任務數超過maximumPoolSize時,對任務的處理策略,默認策略是拒絕添加
需要注意的是這里的handler與安卓中的handler不同
執行流程:
當線程數小于corePoolSize時,每添加一個任務,則立即開啟線程執行
當corePoolSize滿的時候,后面添加的任務將放入緩沖隊列workQueue等待;
當workQueue也滿的時候,看是否超過maximumPoolSize線程數,如果超過,默認拒絕執行
總結來說:核心線程corePoolSize、任務隊列workQueue、最大線程maximumPoolSize,如果三者都滿了,使用handler處理被拒絕的任務。當一個線程的存活時間到達指定的存活時間索命該線程的任務已執行完,該線程的生命周期結束,被拒絕的線程可以重新進入線程池中開始任務,依次循環此過程。
舉例說明:
假如:
corePoolSize=2,maximumPoolSize=3,workQueue容量為8;
最開始,執行的任務A,B,此時corePoolSize已用完,再次執行任務C,則C將被放入緩沖隊列workQueue中等待著,如果后來又添加了7個任務,此時workQueue已滿,則后面再來的任務的數量是5將會和maximumPoolSize比較,由于maximumPoolSize為3,所以只能容納1個了,因為包含corePollSize個數,所以后面來的任務默認都會被拒絕4個。
關于如何在Android中使用ThreadPoolExecutor線程池問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。