Android消息機(jī)制(二) 線程池

核心線程會(huì)一直存活,即使它們處于閑置狀態(tài)饵骨。非核心線程閑置超過超時(shí)時(shí)長會(huì)被回收。

一茫打、線程池優(yōu)點(diǎn)

1.重用線程居触,避免線程創(chuàng)建和銷毀帶來的開銷。
2.有效控制線程池最大并發(fā)數(shù)老赤,避免大量線程因互相搶占系統(tǒng)資源導(dǎo)致阻塞轮洋。
3.方便管理,提供定時(shí)執(zhí)行和間隔循環(huán)執(zhí)行抬旺。

二弊予、ThreadPoolExecutor

android線程池概念來源于java的Executor接口,真正的實(shí)現(xiàn)是ThreadPoolExecutor开财。android四種線程池就是通過配置ThreadPoolExecutor來實(shí)現(xiàn)的汉柒。常見構(gòu)造方法如下:

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,
TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory)
  • corePoolSize
    線程池的核心線程數(shù)误褪。默認(rèn)情況下,核心線程會(huì)一直存活碾褂,即使它們處于閑置狀態(tài)兽间。
  • maximumPoolSize
    線程池中可容納的最大線程數(shù)。當(dāng)活動(dòng)線程達(dá)到這個(gè)數(shù)目后正塌,后續(xù)新任務(wù)被阻塞嘀略。
  • keepAliveTime
    非核心線程閑置時(shí)的超時(shí)時(shí)長,超過此時(shí)長乓诽,會(huì)被回收屎鳍。當(dāng)ThreadPoolExecutor的allowCoreThreadTimeout設(shè)置為true時(shí),keepAliveTime同樣會(huì)作用于核心線程问裕。
  • unit
    指定keepAliveTime的時(shí)間位逮壁。常見枚舉常量有TimeUnit.MILLISECONDS、TimeUnit.SECONDS粮宛、TimeUnit.MINUTES
  • BlockingQueue<Runnable> workQueue
    線程池中的任務(wù)隊(duì)列
  • ThreadFactory threadFactory
    線程工廠窥淆,為線程池創(chuàng)建新線程。
三巍杈、分析各種線程池
  • AsyncTask 源代碼略

  • 核心線程數(shù)等于CPU核心數(shù)+1

  • 最大線程數(shù)等于CPU核心數(shù)*2+1

  • 默認(rèn)情況下核心線程會(huì)在線程池中一直存活忧饭,即使它們處于閑置狀態(tài)

  • 非核心線程通過keepAliveTime設(shè)置閑置時(shí)長,超時(shí)會(huì)被回收筷畦。

  • 任務(wù)隊(duì)列容量128:new LinkedBlockingQueue<Runnable>(128);

  • FixedThreadPool
    只有核心線程词裤,并且沒有超時(shí)機(jī)制,任務(wù)隊(duì)列沒有大小限制鳖宾。
    它能快速地響應(yīng)外界的請求吼砂。

public static ExecutorService newFixedThreadPool(int nThreads){
    return new ThreadPoolExecutor(nThreads,nThreads,0L,
    TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
}
  • CachedThreadPool
public static ExecutorService newCachedThreadPool(){
    return new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L,
    TimeUnit.SECONDS,new SynchronousQueue<Runnable>());
}

只有非核心線程,并且數(shù)量不限鼎文∮婕纾空閑線程超時(shí)時(shí)長60秒。
比較適合執(zhí)行大量耗時(shí)較少的任務(wù)拇惋。當(dāng)整個(gè)線程池處于閑置狀態(tài)時(shí)周偎,都會(huì)超時(shí)被停止,幾乎不會(huì)占用任何系統(tǒng)資源撑帖。

  • ScheduledThreadPool
public static ExecutorService newScheduledThreadPool(int corePoolSize){
    return new ThreadPoolExecutor(corePoolSize,Integer.MAX_VALUE,0L,
    TimeUnit.SECONDS,new DelayedWorkQueue<Runnable>());
}

核心線程數(shù)量固定的蓉坎,非核心線程數(shù)沒有限制。主要用于執(zhí)行定時(shí)任務(wù)和具有固定周期的重復(fù)任務(wù)胡嘿。

  • SingleThreadExecutor
public static ExecutorService newSingleThreadExecutor(){
    return new ThreadPoolExecutor(1,1,0L,
    TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());
}

只有一個(gè)核心線程蛉艾,統(tǒng)一所有外界任務(wù)到一個(gè)線程中,使得這些任務(wù)間不需要處理線程同步的問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伺通,一起剝皮案震驚了整個(gè)濱河市箍土,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罐监,老刑警劉巖吴藻,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弓柱,居然都是意外死亡沟堡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門矢空,熙熙樓的掌柜王于貴愁眉苦臉地迎上來航罗,“玉大人,你說我怎么就攤上這事屁药≈嘌” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵酿箭,是天一觀的道長复亏。 經(jīng)常有香客問我,道長缭嫡,這世上最難降的妖魔是什么缔御? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮妇蛀,結(jié)果婚禮上耕突,老公的妹妹穿的比我還像新娘。我一直安慰自己评架,他們只是感情好腾供,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布夭坪。 她就那樣靜靜地躺著恕出,像睡著了一般屯伞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挣磨,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音荤懂,去河邊找鬼茁裙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛节仿,可吹牛的內(nèi)容都是我干的晤锥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矾瘾!你這毒婦竟也來了女轿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤壕翩,失蹤者是張志新(化名)和其女友劉穎蛉迹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體放妈,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡北救,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芜抒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珍策。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宅倒,靈堂內(nèi)的尸體忽然破棺而出攘宙,到底是詐尸還是另有隱情,我是刑警寧澤拐迁,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布蹭劈,位于F島的核電站,受9級特大地震影響唠亚,放射性物質(zhì)發(fā)生泄漏链方。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一灶搜、第九天 我趴在偏房一處隱蔽的房頂上張望祟蚀。 院中可真熱鬧,春花似錦割卖、人聲如沸前酿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罢维。三九已至,卻和暖如春丙挽,著一層夾襖步出監(jiān)牢的瞬間肺孵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工颜阐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留平窘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓凳怨,卻偏偏與公主長得像瑰艘,于是被迫代替她去往敵國和親是鬼。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容