ThreadPool And Worker

Jdk原生線程池

  • 容易誤解的地方:core線程已滿的情況下,先放queue,queue也滿了的情況下,才會(huì)擴(kuò)建線程,直到maxSize后,才執(zhí)行拒絕策略;
image.png
  • 提交task,都發(fā)生了什么呢?
  1. 當(dāng)已創(chuàng)建的線程數(shù)小于coreSize時(shí),add new worker;
  2. 當(dāng)大于coreSize時(shí),新提交的task放入queue中,等待消費(fèi);
  3. 當(dāng)queue滿了時(shí),繼續(xù)add new worker,最多創(chuàng)建max個(gè)worker
  4. worker負(fù)責(zé)執(zhí)行task,worker有一個(gè)for;;無(wú)限循環(huán)過(guò)程,不斷從queue中獲取task,如果task沒(méi)有時(shí),可以阻塞get或者get null;


    image.png
  • 可能的坑
  1. task執(zhí)行耗時(shí)太長(zhǎng)導(dǎo)致線程池吞吐量太低,大量task被reject
  2. 線程池可以在初始化時(shí)即預(yù)熱線程,因?yàn)樘峤籺ask是同步方法,導(dǎo)致等鎖擠壓;
  3. Executors提供的幾個(gè)常用常用的線程池,queue的size都是Integer.Max,如果消費(fèi)的慢,很容易o(hù)om
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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