Android 中的執行緒池
執行緒池優點
- 避免因為執行緒的頻繁建立和銷燬所帶來的效能開銷,節省資源
- 能有效控制執行緒池最大併發數,避免大量執行緒之間因互相搶佔系統資源而導致阻塞或卡頓
- 能夠對執行緒進行簡單管理
通過為 ThreadPoolExecutor 配置不同的引數建立功能特性不同的執行緒池
下面是 TheadPoolExecutor 的一個較常用的構造方法
publicTheadPoolExecutor(intcorePoolSize, intmaximumPoolSize, longkeepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory )
-
corePoolSize
執行緒池的核心執行緒數,預設情況下,核心執行緒會線上程池中一直存活,即使他們處於閒置狀態。
-
maximumPoolSize
執行緒池所能容納的最大執行緒數,當活動執行緒數達到這個數值後,後續的新任務將會被阻塞。
-
keepAliveTime
非核心執行緒閒置時的超時時長,超過這個時長,非核心執行緒會被回收。
-
unit
用於指定 keepAliveTime 引數的時間單位,這是一個列舉,常用的有TimeUnit.MILLISECONDS(毫秒) ,TimeUnit.SECONDS(秒),TimeUnit.MINUTES(秒)
-
workQueue
執行緒池中的任務佇列。
-
threadFactory
執行緒工廠,為執行緒池提供建立新執行緒的功能。
Android 的執行緒池主要分為 4 類 ,這 4 類執行緒池可以通過 Executors 所提供的工廠方法來實現
1. FixedThreadPool
通過Executors 的 newFixedThreadPool 方法來建立。它是一種執行緒數量固定的執行緒池,當執行緒處於空閒的狀態時,它們並不會被回收,除非執行緒池關閉了。
2. CachedThreadPool
通過Executors 的 newCachedThreadPool 方法來建立。它是一種執行緒數量不定的執行緒池,它只有非核心執行緒,並且其最大執行緒數為Integer.MAX_VALUE。當執行緒池中的執行緒都處於活躍狀態時,執行緒池會建立新的執行緒來處理任務,否則利用空閒的執行緒處理。執行緒池中的空閒執行緒都有超時機制,超時就會被回收。
3. ScheduledThreadPool
通過Executors 的 newScheduledThreadPool 方法來建立。它的核心執行緒數量是固定的,而非核心執行緒數是沒有限制的,並且當非核心執行緒閒置時會被立即回收。
4. SingleThreadExecutor
通過Executors 的 newSingleThreadExecutor 方法來建立。這類執行緒池只有一個核心執行緒,它確保所有任務都在同一個執行緒中按順序執行。SingleThreadExecutor的意義在於統一所有外界任務到一個執行緒中,這使得這些任務不需要處理執行緒同步的問題。