Android中的線程池

線程池有以下的優(yōu)點(diǎn):

  • 重用線程池中的線程死遭,避免因?yàn)榫€程的創(chuàng)建和銷毀所帶來的性能上的開銷
  • 能有效控制線程池的最大并發(fā)數(shù)草巡,避免大量的線程之間因?yàn)榛ハ鄵屨枷到y(tǒng)資源而導(dǎo)致阻塞現(xiàn)象
  • 能夠?qū)€程池就行簡單的管理,并提供定時執(zhí)行以及指定間隔循環(huán)
線程池介紹

ThreadPoolExecutor是線程池的真正實(shí)現(xiàn)

  /**
     * Creates a new {@code ThreadPoolExecutor} with the given initial
     * parameters and default rejected execution handler.
     *
     * @param corePoolSize the number of threads to keep in the pool, even
     *        if they are idle, unless {@code allowCoreThreadTimeOut} is set
     * @param maximumPoolSize the maximum number of threads to allow in the
     *        pool
     * @param keepAliveTime when the number of threads is greater than
     *        the core, this is the maximum time that excess idle threads
     *        will wait for new tasks before terminating.
     * @param unit the time unit for the {@code keepAliveTime} argument
     * @param workQueue the queue to use for holding tasks before they are
     *        executed.  This queue will hold only the {@code Runnable}
     *        tasks submitted by the {@code execute} method.
     * @param threadFactory the factory to use when the executor
     *        creates a new thread
     * @throws IllegalArgumentException if one of the following holds:<br>
     *         {@code corePoolSize < 0}<br>
     *         {@code keepAliveTime < 0}<br>
     *         {@code maximumPoolSize <= 0}<br>
     *         {@code maximumPoolSize < corePoolSize}
     * @throws NullPointerException if {@code workQueue}
     *         or {@code threadFactory} is null
     */
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             threadFactory, defaultHandler);
    }

ThreadPoolExecutor執(zhí)行任務(wù)是遵循的規(guī)則


image.png

參數(shù)設(shè)置

private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
    private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
    private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
    private static final int KEEP_ALIVE = 1;

    private static final ThreadFactory sThreadFactory = new ThreadFactory() {
        private final AtomicInteger mCount = new AtomicInteger(1);

        public Thread newThread(Runnable r) {
            return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());
        }
    };

    private static final BlockingQueue<Runnable> sPoolWorkQueue =
            new LinkedBlockingQueue<Runnable>(128);

    /**
     * An {@link Executor} that can be used to execute tasks in parallel.
     */
    public static final Executor THREAD_POOL_EXECUTOR
            = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
                    TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);

線程池的分類

·FixedThreadPool:
數(shù)量固定的核心線程池,沒有超時機(jī)制。任務(wù)隊列大小沒有限制辫继。
·CachedThreadPool:
線程數(shù)量不定,只有非核心賢臣俗慈,最大線程數(shù)位Integer.MAX_VALUE姑宽。它比較適合執(zhí)行大量的耗時較少的任務(wù)
·ScheduledThreadPool:
核心線程數(shù)量固定,非核心線程數(shù)量沒有限制姜盈。適合執(zhí)行定時任務(wù)和具有固定周期的重復(fù)任務(wù)低千。
·SingleThreadExecutor:
只有一個核心線程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子示血,更是在濱河造成了極大的恐慌棋傍,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难审,死亡現(xiàn)場離奇詭異瘫拣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)告喊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門麸拄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人黔姜,你說我怎么就攤上這事拢切。” “怎么了秆吵?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵淮椰,是天一觀的道長。 經(jīng)常有香客問我纳寂,道長主穗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任毙芜,我火速辦了婚禮忽媒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腋粥。我一直安慰自己晦雨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布灯抛。 她就那樣靜靜地躺著金赦,像睡著了一般音瓷。 火紅的嫁衣襯著肌膚如雪对嚼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天绳慎,我揣著相機(jī)與錄音纵竖,去河邊找鬼。 笑死杏愤,一個胖子當(dāng)著我的面吹牛靡砌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播珊楼,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼通殃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起画舌,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤堕担,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后曲聂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霹购,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年朋腋,在試婚紗的時候發(fā)現(xiàn)自己被綠了齐疙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡旭咽,死狀恐怖贞奋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穷绵,我是刑警寧澤忆矛,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站请垛,受9級特大地震影響催训,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宗收,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一漫拭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧混稽,春花似錦采驻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洽洁,卻和暖如春痘系,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饿自。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工汰翠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昭雌。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓复唤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烛卧。 傳聞我的和親對象是個殘疾皇子佛纫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

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

  • 線程池的優(yōu)點(diǎn): 重用線程池中的線程,避免因?yàn)榫€程的創(chuàng)建和銷毀帶來的性能消耗 能有效的控制線程的最大并發(fā)數(shù),避免大量...
    乆丩乣閱讀 5,390評論 5 30
  • 很久沒有更新了呈宇,首先跟各位說聲對不起跟磨。近段時間陷進(jìn)了失眠的深淵難以自拔,工作攒盈、生活一團(tuán)糟抵拘,每天都是滿滿的負(fù)能量,學(xué)...
    山野紙鶴閱讀 1,067評論 0 9
  • 線程池的好處 (1)重用線程池中的線程型豁,避免因?yàn)榫€程的創(chuàng)建和銷毀所帶來的性能的開銷僵蛛。(2)能有效控制線程池的最大并...
    藍(lán)楓zeke閱讀 354評論 0 2
  • Android 中的四種線程池 在開發(fā)中使用線程池的優(yōu)點(diǎn) 重用線程池中的線程,避免因?yàn)榫€程的創(chuàng)建和銷毀帶來的性能開...
    任教主來也閱讀 184評論 0 0
  • 猝不及防,史上首次一條政治新聞引發(fā)起姐妹界的瘋轉(zhuǎn)衣形,標(biāo)題是:“殺害金正男特工身份曝光驼侠,疑似1988年中年女子”。 原...
    魏費(fèi)斯閱讀 1,419評論 15 4