線程池使用

ThreadPoolExecutor 線程池

創(chuàng)建線程池,主要利用 ThreadPoolExecutor 這個(gè)類,

 public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {

corePoolSize: 該線程池中核心線程的數(shù)量。

注意:線程池中存在核心線程與非核心線程,核心線程一旦創(chuàng)建會(huì)一直執(zhí)行任務(wù)或等待任務(wù)到來,而非核心線程只在任務(wù)隊(duì)列塞滿任務(wù)時(shí)去執(zhí)行多出的任務(wù),并且非核心線程在等待一段時(shí)間后將會(huì)被回收,這個(gè)時(shí)間作為參數(shù)可調(diào)配,

maximumPoolSize:該線程池中最大線程數(shù)量。(區(qū)別于corePoolSize)

keepAliveTime:從字面上就可以理解,是非核心線程空閑時(shí)要等待下一個(gè)任務(wù)到來的時(shí)間,當(dāng)任務(wù)很多,每個(gè)任務(wù)執(zhí)行時(shí)間很短的情況下調(diào)大該值有助于提高線程利用率。
注意:當(dāng)allowCoreThreadTimeOut屬性設(shè)為true時(shí),該屬性也可用于核心線程。

unit:上面時(shí)間屬性的單位

workQueue:任務(wù)隊(duì)列,后面詳述。

threadFactory:線程工廠,可用于設(shè)置線程名字等等,一般無須設(shè)置該參數(shù)。

handler: 飽和策略

線程執(zhí)行流程

1.execute一個(gè)線程之后,如果線程池中的線程數(shù)未達(dá)到核心線程數(shù),則會(huì)立馬啟用一個(gè)核心線程去執(zhí)行。

2.execute一個(gè)線程之后,如果線程池中的線程數(shù)已經(jīng)達(dá)到核心線程數(shù),且workQueue未滿,則將新任務(wù)放入workQueue中等待執(zhí)行。

3.execute一個(gè)線程之后,如果線程池中的線程數(shù)已經(jīng)達(dá)到核心線程數(shù)但未超過非核心線程數(shù),且workQueue已滿,則開啟一個(gè)非核心線程來執(zhí)行任務(wù)。

4.execute一個(gè)線程之后,如果線程池中的線程數(shù)已經(jīng)超過非核心線程數(shù),則拒絕執(zhí)行該任務(wù),采取飽和策略,并拋出RejectedExecutionException異常。

注意 使用 threadFactory工廠的時(shí)候,

public interface ThreadFactory {

    Thread newThread(Runnable r);
}

創(chuàng)建Thread的時(shí)候,需要把runnbale對(duì)象傳遞給創(chuàng)建的thread類,
如果不傳遞的話,線程執(zhí)行的時(shí)候,會(huì)運(yùn)行thread的run方法

  val threadFactory = ThreadFactory {
            val thread = Thread(it)
            thread.name = "executor-${seq.getAndIncrement()}"
            thread
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 線程 線程在Android中是個(gè)很重要的概念,從用途來說,線程分為主線程與子線程,主線程用于處理界面相關(guān)事情,子線...
    我好芒閱讀 29,143評(píng)論 0 34
  • 個(gè)人記錄,麻煩指正! 線程池的前世今生 ??答:Java1.5中引入的Executor框架把任務(wù)的提交和執(zhí)行進(jìn)行解...
    沈先生的影子閱讀 514評(píng)論 0 1
  • 線程池算是Android開發(fā)中非常常用的一個(gè)東西了,只要涉及到線程的地方,大多數(shù)情況下都會(huì)涉及到線程池。Andro...
    鄭在學(xué)_blog閱讀 722評(píng)論 0 1
  • 這是一篇 寫的非常用心的 博文,這里是原文地址https://blog.csdn.net/l540675759/a...
    Chauncey_Chen閱讀 1,732評(píng)論 0 45
  • 我們使用線程的時(shí)候就去創(chuàng)建一個(gè)線程,這樣實(shí)現(xiàn)起來非常簡(jiǎn)便,但是就會(huì)有一個(gè)問題:如果并發(fā)的線程數(shù)量很多,并且每個(gè)線程...
    MonkeyLqj閱讀 637評(píng)論 0 2

友情鏈接更多精彩內(nèi)容