Android之線程池ThreadPoolExecutor的簡(jiǎn)介
Android中的線程池ThreadPoolExecutor解決了單線程下載數(shù)據(jù)的效率慢和線程阻塞的的問題,它的應(yīng)用也是優(yōu)化實(shí)現(xiàn)的方式。所以它的重要性不言而喻,但是它的復(fù)雜性也大,理解上可能會(huì)有問題,不過作為安卓工程師,了解這個(gè)也是必然的。
ThreadPoolExecutor有幾個(gè)構(gòu)造函數(shù),最多參數(shù)的構(gòu)造函數(shù)最常用,下面會(huì)詳細(xì)介紹各個(gè)參數(shù)的含義及其幾個(gè)參數(shù)之間的關(guān)系:
<span style="font-size:18px;">ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler)</span>
各個(gè)參數(shù)的含義:
corePoolSize: 核心線程數(shù),能夠同時(shí)執(zhí)行的任務(wù)數(shù)量
maximumPoolSize:除去緩沖隊(duì)列中等待的任務(wù),最大能容納的任務(wù)數(shù)(其實(shí)是包括了核心線程池?cái)?shù)量)
keepAliveTime:超出workQueue的等待任務(wù)的存活時(shí)間maximumPoolSize放置的一個(gè)線程的存活時(shí)間
unit:時(shí)間單位
workQueue:阻塞等待線程的隊(duì)列,一般使用new LinkedBlockingQueue<Runnable>()這個(gè),如果不指定容量, 會(huì)一直往里邊添加,沒有限制,workQueue永遠(yuǎn)不會(huì)滿;
threadFactory:創(chuàng)建線程的工廠,使用系統(tǒng)默認(rèn)的類
handler:當(dāng)任務(wù)數(shù)超過maximumPoolSize時(shí),對(duì)任務(wù)的處理策略,默認(rèn)策略是拒絕添加
需要注意的是這里的handler與安卓中的handler不同
執(zhí)行流程:
當(dāng)線程數(shù)小于corePoolSize時(shí),每添加一個(gè)任務(wù),則立即開啟線程執(zhí)行
當(dāng)corePoolSize滿的時(shí)候,后面添加的任務(wù)將放入緩沖隊(duì)列workQueue等待;
當(dāng)workQueue也滿的時(shí)候,看是否超過maximumPoolSize線程數(shù),如果超過,默認(rèn)拒絕執(zhí)行
總結(jié)來說:核心線程corePoolSize、任務(wù)隊(duì)列workQueue、最大線程maximumPoolSize,如果三者都滿了,使用handler處理被拒絕的任務(wù)。當(dāng)一個(gè)線程的存活時(shí)間到達(dá)指定的存活時(shí)間索命該線程的任務(wù)已執(zhí)行完,該線程的生命周期結(jié)束,被拒絕的線程可以重新進(jìn)入線程池中開始任務(wù),依次循環(huán)此過程。
舉例說明:
假如:
corePoolSize=2,maximumPoolSize=3,workQueue容量為8;
最開始,執(zhí)行的任務(wù)A,B,此時(shí)corePoolSize已用完,再次執(zhí)行任務(wù)C,則C將被放入緩沖隊(duì)列workQueue中等待著,如果后來又添加了7個(gè)任務(wù),此時(shí)workQueue已滿,則后面再來的任務(wù)的數(shù)量是5將會(huì)和maximumPoolSize比較,由于maximumPoolSize為3,所以只能容納1個(gè)了,因?yàn)榘琧orePollSize個(gè)數(shù),所以后面來的任務(wù)默認(rèn)都會(huì)被拒絕4個(gè)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Android實(shí)現(xiàn)自定義View控件的流程詳解
這篇文章主要為大家詳細(xì)介紹了Android中實(shí)現(xiàn)自定義View控件的流程,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-06-06
Android端權(quán)限隱私的合規(guī)化處理實(shí)戰(zhàn)記錄
大家應(yīng)該都發(fā)現(xiàn)了,現(xiàn)在很多應(yīng)用市場(chǎng)都要求應(yīng)用上架需要用戶協(xié)議,這篇文章主要給大家介紹了關(guān)于Android端權(quán)限隱私合規(guī)化處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08
Android實(shí)現(xiàn)仿微軟系統(tǒng)加載動(dòng)畫效果
這篇文章主要介紹了Android實(shí)現(xiàn)仿微軟系統(tǒng)加載動(dòng)畫效果的方法,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-04-04
Android添加glide庫報(bào)錯(cuò)Error: Failed to resolve: com.android.suppo
這篇文章主要給大家介紹了關(guān)于Android添加glide庫報(bào)錯(cuò)Error: Failed to resolve: com.android.support:support-annotations:26.0.2的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-11-11
基于Android中Webview使用自定義的javascript進(jìn)行回調(diào)的問題詳解
本篇文章對(duì)Android中Webview使用自定義的javascript進(jìn)行回調(diào)的問題進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05
Android中利用viewflipper動(dòng)畫切換屏幕效果
這篇文章主要介紹了Android中利用viewflipper動(dòng)畫切換屏幕效果的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Android 實(shí)現(xiàn)背景圖和狀態(tài)欄融合方法
下面小編就為大家分享一篇Android 實(shí)現(xiàn)背景圖和狀態(tài)欄融合方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
android ImageView 的幾點(diǎn)經(jīng)驗(yàn)總結(jié)
本篇文章是對(duì)android中ImageView的使用技巧進(jìn)行了幾點(diǎn)經(jīng)驗(yàn)總結(jié),需要的朋友參考下2013-06-06
Android webview加載https鏈接錯(cuò)誤或無響應(yīng)的解決
這篇文章主要介紹了Android webview加載https鏈接錯(cuò)誤或無響應(yīng)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03

