相關文章:
【多線程】一、線程狀態切換
【多線程】二、線程優先級&守護線程
【多線程】三、線程訪問變量
【多線程】四、線程異常抓捕
【多線程】五、線程池
【多線程】六、鎖與同步
【多線程】七、阻塞隊列
【多線程】八、異步計算結果獲取
【多線程】九、Android異步任務
爲解決頻繁線程創建、銷燬帶來的不必要損耗,推薦使用線程池。
ThreadPoolExecutor(
corePoolSize, // 核心線程數,核心線程一直存活(即使空閒,除非allowCoreThreadTimeout(true))
maximumPoolSize, // 最大線程數
keepAliveTime, // 非核心線程閒置時長,超時線程會被回收
timeUnit, // 時間單位,可用TimeUnit.MILLISECONDS
workQueue, // 任務隊列,BlockingQueue<Runnable>
threadFactory, // 線程創建工程
rejectedExecutionHandler, // 任務拒絕處理器, 默認ThreadPoolExecutor.AbortPolicy拋異常;
);
@see AsyncTask::THREAD_POOL_EXECUTOR
預置線程池 | 說明 |
---|---|
FixedThreadPool |
固定核心線程數且無超時關閉,任務隊列無上限 線程全忙時,新任務一直等待 適用請求頻繁,數量基本固定的任務 |
CachedThreadPool |
不定非核心線程數(MAX_INT)超時60s關閉 空任務隊列( SynchronousQueue<Runnable> ),新任務立即執行適用數量龐大,耗時較少的任務 |
ScheduledThreadPool |
核心線程數固定無超時關閉 非核心線程無限制(MAX_INT)空閒立即回收 空任務隊列,新任務立即執行 適用於定時任務 或 週期性執行的重複任務 |
SingleThreadPool |
單核心線程,確保任務順序執行(串行) 單線程模型可避免同步問題 |