国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android之線程池ThreadPoolExecutor的簡介

2019-10-21 21:19:22
字體:
來源:轉載
供稿:網友

Android中的線程池ThreadPoolExecutor解決了單線程下載數據的效率慢和線程阻塞的的問題,它的應用也是優化實現的方式。所以它的重要性不言而喻,但是它的復雜性也大,理解上可能會有問題,不過作為安卓工程師,了解這個也是必然的。

ThreadPoolExecutor有幾個構造函數,最多參數的構造函數最常用,下面會詳細介紹各個參數的含義及其幾個參數之間的關系:

<span style="font-size:18px;">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個。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平舆县| 乃东县| 卢龙县| 蛟河市| 修水县| 竹溪县| 揭东县| 丹巴县| 象州县| 柯坪县| 聊城市| 天镇县| 甘德县| 平遥县| 深州市| 无极县| 封丘县| 绥阳县| 礼泉县| 赤城县| 张掖市| 邮箱| 阿勒泰市| 万盛区| 朝阳市| 南溪县| 西吉县| 凤庆县| 栖霞市| 仪陇县| 桂阳县| 东丽区| 宝丰县| 湘西| 昭苏县| 尼玛县| 金溪县| 崇阳县| 锡林浩特市| 灵山县| 玛曲县|