android線程管理--線程池

為什么要引入線程池望浩?

1.new Thread()的缺點

  • 每次new Thread()耗費性能
  • 調(diào)用new Thread()創(chuàng)建的線程缺乏管理,被稱為野線程缘回,而且可以無限制創(chuàng)建典挑,之間相互競爭,會導致過多占用系統(tǒng)資源導致系統(tǒng)癱瘓您觉。
  • 不利于擴展琳水,比如如定時執(zhí)行般堆、定期執(zhí)行诚啃、線程中斷

2.采用線程池的優(yōu)點

  • 重用存在的線程,減少對象創(chuàng)建和橙、消亡的開銷极阅,性能佳
  • 可有效控制最大并發(fā)線程數(shù)筋搏,提高系統(tǒng)資源的使用率,同時避免過多資源競爭奔脐,避免堵塞
  • 提供定時執(zhí)行髓迎、定期執(zhí)行、單線程波势、并發(fā)數(shù)控制等功能
Executor

android中線程池的概念來源于java中的Executor, 線程池真正的實現(xiàn)類是ThreadPoolExecutor橄维,它間接實現(xiàn)了Executor接口。
Executor接口只有一個方法execute()凛忿,該方法用來執(zhí)行線程中的操作竞川。

Executor executor = new MyExecutor();
executor.execute(new RunnableTaskOne());
executor.execute(new RunnableTaskTwo());

ThreadPoolExecutor提供了一系列參數(shù)來配置線程池,通過不同的參數(shù)配置實現(xiàn)不同功能特性的線程池床牧,android中的Executors類提供了4個工廠方法用于創(chuàng)建4種不同特性的線程池給開發(fā)者用.

  1. newFixedThreadPool
    創(chuàng)建一個可重用固定線程數(shù)的線程池遭贸,以共享的無界隊列方式來運行這些線程。
ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i = 0; i < 20; i++) {
      Runnable syncRunnable = new Runnable() {
          @Override
          public void run() {
               Log.e(TAG, Thread.currentThread().getName());
          }
       };
       executorService.execute(syncRunnable);
}

運行結(jié)果:總共只會創(chuàng)建5個線程糯累, 開始執(zhí)行五個線程册踩,當五個線程都處于活動狀態(tài),再次提交的任務都會加入隊列等到其他線程運行結(jié)束胖秒,當線程處于空閑狀態(tài)時會被下一個任務復用
特點:只有核心線程數(shù)慕的,并且沒有超時機制,因此核心線程即使閑置時风题,也不會被回收嫉父,因此能更快的響應外界的請求.

  1. newCachedThreadPool
    創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要摇肌,可靈活回收空閑線程
ExecutorService executorService = Executors.newCachedThreadPool(5);
for (int i = 0; i < 100; i++) {
      Runnable syncRunnable = new Runnable() {
          @Override
          public void run() {
               Log.e(TAG, Thread.currentThread().getName());
          }
       };
       executorService.execute(syncRunnable);
}

運行結(jié)果:緩存線程池大小是不定值仪际,可以需要創(chuàng)建不同數(shù)量的線程树碱,在使用緩存型池時,先查看池中有沒有以前創(chuàng)建的線程疹娶,如果有伦连,就復用.如果沒有钳垮,就新建新的線程加入池中,緩存型池子通常用于執(zhí)行一些生存期很短的異步型任務
特點:沒有核心線程歧焦,非核心線程數(shù)量沒有限制, 超時為60秒.

  1. newScheduledThreadPool
    創(chuàng)建一個定長線程池,支持定時及周期性任務執(zhí)行
    ** schedule(Runnable command,long delay, TimeUnit unit)**創(chuàng)建并執(zhí)行在給定延遲后啟用的一次性操作
ExecutorService executorService = Executors.newScheduledThreadPool(5);
for (int i = 0; i < 200; i++) {
      Runnable syncRunnable = new Runnable() {
          @Override
          public void run() {
               Log.e(TAG, Thread.currentThread().getName());
          }
       };
       executorService.schedule(syncRunnable, 5000, TimeUnit.MILLISECONDS);
}

特點:核心線程數(shù)是固定的绢馍,非核心線程數(shù)量沒有限制向瓷, 沒有超時機制.主要用于執(zhí)行定時任務和具有固定周期的重復任務.

  1. SingleThreadExecutor
    創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務舰涌,保證所有任務按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行
ExecutorService executorService = Executors.newScheduledThreadPool(5);
for (int i = 0; i < 200; i++) {
      Runnable syncRunnable = new Runnable() {
          @Override
          public void run() {
               Log.e(TAG, Thread.currentThread().getName());
          }
       };
       executorService.execute(syncRunnable);
}

特點:只有一個核心線程猖任,并沒有超時機制.意義在于統(tǒng)一所有的外界任務到一個線程中, 這使得在這些任務之間不需要處理線程同步的問題.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓷耙,一起剝皮案震驚了整個濱河市朱躺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搁痛,老刑警劉巖长搀,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸡典,死亡現(xiàn)場離奇詭異源请,居然都是意外死亡,警方通過查閱死者的電腦和手機轿钠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門巢钓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疗垛,你說我怎么就攤上這事症汹。” “怎么了贷腕?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵背镇,是天一觀的道長。 經(jīng)常有香客問我泽裳,道長瞒斩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任涮总,我火速辦了婚禮胸囱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瀑梗。我一直安慰自己烹笔,他們只是感情好,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布抛丽。 她就那樣靜靜地躺著谤职,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亿鲜。 梳的紋絲不亂的頭發(fā)上允蜈,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音,去河邊找鬼饶套。 笑死漩蟆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的妓蛮。 我是一名探鬼主播爆安,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仔引!你這毒婦竟也來了扔仓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤咖耘,失蹤者是張志新(化名)和其女友劉穎翘簇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體儿倒,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡版保,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夫否。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彻犁。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凰慈,靈堂內(nèi)的尸體忽然破棺而出汞幢,到底是詐尸還是另有隱情,我是刑警寧澤微谓,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布森篷,位于F島的核電站,受9級特大地震影響豺型,放射性物質(zhì)發(fā)生泄漏仲智。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一姻氨、第九天 我趴在偏房一處隱蔽的房頂上張望钓辆。 院中可真熱鬧,春花似錦肴焊、人聲如沸前联。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛀恩。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卿操,已是汗流浹背聋伦。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工浦妄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留累提,地道東北人皱碘。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓财剖,卻偏偏與公主長得像幌羞,于是被迫代替她去往敵國和親寸谜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

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

  • 前段時間遇到這樣一個問題属桦,有人問微信朋友圈的上傳圖片的功能怎么做才能讓用戶的等待時間較短熊痴,比如說一下上傳9張圖片,...
    加油碼農(nóng)閱讀 1,204評論 0 2
  • 一.線程與進程相關(guān) 1.進程 ??定義:進程是具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進程是操作系統(tǒng)分...
    Geeks_Liu閱讀 1,721評論 2 4
  • 1聂宾、new Thread的弊端 執(zhí)行一個異步任務你還只是如下new Thread嗎果善? ``` new Thread...
    Jannonx閱讀 2,764評論 0 6
  • 今天大風降溫,穿了毛衣系谐,吃了羊蝎子巾陕,香噴噴。親愛的媽咪做的纪他,愛你鄙煤,我的媽咪,雖然我任性茶袒,暴躁梯刚,不知好歹,可你還是一...
    風習習77閱讀 119評論 0 0
  • 你身邊有經(jīng)常倒霉的朋友嗎?有處處都倒霉的嗎预愤?靠沟于,越說自己倒霉就倒霉,我身邊就有一位植康,于是旷太,我給他起了個外號叫倒霉蛋...
    168荷塘月色閱讀 252評論 0 0