使用線程池的好處是減少線程創(chuàng)建和銷毀上所花費的時間及系統(tǒng)資源的開銷,解決資源不足的問題。
- 重用存在的線程,減少線程創(chuàng)建、消亡的開銷
- 有效控制最大并發(fā)線程數(shù)
- 提供定時執(zhí)行,定期執(zhí)行,單線程,并發(fā)數(shù)控制等功能
Android 中的線程池都直接或間接通過配置 ThreadPoolExecutor 來實現(xiàn)不同特性的線程池,常見線程池為:
-
newCachedThreadPool: 只有非核心線程,最大線程數(shù)非常大,如果線程池中的線程都活動時,有新任務(wù)會創(chuàng)建新線程,否則會利用空閑線程,線程空閑時間為60秒,超過60秒會被回收。
適合大量的耗時少的任務(wù)。 -
newFlxedThreadPool: 只有核心線程,并且數(shù)量固定,隊列沒有限制,如果線程池中的所有線程都活動時,新任務(wù)加入隊列等待執(zhí)行,空閑線程不回被釋放,還會占用一定的系統(tǒng)資源。
更快的相應(yīng)外界請求。 -
newScheduledThreadPool: 核心線程數(shù)固定,非核心線程沒有限制,空閑時會直接被回收。
適合執(zhí)行定時任務(wù)及固定周期的重復(fù)任務(wù) - newSingleThreadExecutor: 只有一個核心線程,確保所有任務(wù)都在同一線程中按順序完成。
線程池工作流程圖

線程池工作流程