線程池

new Thread 弊端

  • 每次new THread 新建對(duì)象,性能差
  • 線程缺乏統(tǒng)一管理,可能無限制的新建線程,互相競(jìng)爭(zhēng),有可能占用過多系統(tǒng)資源導(dǎo)致死機(jī)或OOM
  • 缺少更多功能,如更多執(zhí)行,定期執(zhí)行,線程中斷

線程池的好處

  • 重用存在的線程,減少對(duì)象創(chuàng)建,消亡的開銷,性能佳
  • 可有效控制最大并發(fā)線程數(shù),提高系統(tǒng)資源利用率,同時(shí)可以避免過多資源競(jìng)爭(zhēng),避免阻塞
  • 提供定時(shí)執(zhí)行,定期執(zhí)行,單線程,并發(fā)數(shù)控制等功能

線程池- ThreadPoolExecutor

  • corePoolSize: 核心線程數(shù)量

  • maximumPoolSIze :線程最大線程數(shù)

  • workQueue:阻塞隊(duì)列,存儲(chǔ)等待執(zhí)行的任務(wù),很重要,會(huì)對(duì)線程池運(yùn)行過程產(chǎn)生重大影響

  • keepAliveTime:線程沒有任務(wù)執(zhí)行時(shí)最多保持多久時(shí)間終止

  • unit :keepAliveTime的時(shí)間單位

  • threadFactory:線程工廠,用來創(chuàng)建線程

  • rejectHandler: 當(dāng)拒絕處理任務(wù)時(shí)的策略


    線程池- threadPoolExecutor.png
  • execute(): 提交任務(wù),交給線程池執(zhí)行

  • submit(): 提交任務(wù),能夠返回執(zhí)行結(jié)果 execute+Future

  • shutdown():關(guān)閉線程池,等待任務(wù)都執(zhí)行完成

  • shutdownNow(): 關(guān)閉線程池,不等待任務(wù)執(zhí)行完

  • getTaskCount(); 線程池已執(zhí)行和未執(zhí)行的任務(wù)總數(shù)

  • getCompletedTaskCount():已完成的任務(wù)數(shù)量

  • getPoolSize():線程池當(dāng)前的線程數(shù)量

  • getActiveCount():當(dāng)前線程池中正在執(zhí)行任務(wù)的線程數(shù)量

線程池類圖.png

Executor框架接口

  • Executors.newCachedThreadPool
  • Executors.newFixedThreadPool
  • Executors.newScheduledThreadPool
  • Executors.newSingleThreadExecutor

線程池- 合理配置

  • CPU密集型任務(wù),就需要盡量壓榨CPU,參考值可以設(shè)為NCPU+1
  • IO密集型任務(wù),參考值可以設(shè)置為2*NCPU
?著作權(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ù)。

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