Android 執行緒池簡介與使用

2021-10-06 21:08:29 字數 1943 閱讀 4130

重用執行緒池中的執行緒,避免因為執行緒的建立和銷毀帶來的效能開銷。

能有效控制線程池的最大併發數,避免大量的執行緒之間因互相搶占系統資源而導致的阻塞現象。

能夠對執行緒進行簡單的管理,並提供定時執行的以及指定間隔迴圈執行等功能

。threadpoolexecutor是執行緒池的真正實現,它的構造方法提供了一系列引數來配置執行緒,構造方法如下:

public

threadpoolexecutor

(int corepoolsize,

int maximumpoolsize,

long keepalivetime,

timeunit unit,

blockingqueue

workqueue,

threadfactory threadfactory,

rejectedexecutionhandler handler)

引數說明

maximumpoolsize

執行緒池所能容納的最大執行緒數,當執行緒數達到該值時,新任務會被阻塞

keepalivetime

非核心執行緒閒置時的超時時長,超過這個時長,非核心執行緒會被**。

unit

指定keepalivetime的時間單位,可選有timeunit.milliseconds(毫秒)、timeunit.seconds(秒)、timeunit.minutes(分鐘)。

workqueue

執行緒池中的任務佇列,通過執行緒池的execute方法提交的runnable物件會儲存在這個引數中。

threadexecutepool執行任務時,大致遵循下面規則:

如果執行緒池中的執行緒數量未達到核心執行緒的數量,那麼會直接啟動乙個核心執行緒來執行任務。

如果執行緒池中的執行緒數量已經達到或超過核心執行緒的數量,那麼任務會被插入到任務佇列中排隊等待執行。

如果任務佇列滿,無法插入新任務,執行緒數量未達到執行緒池規定最大值,那麼會立即啟動乙個非核心執行緒來執行任務。

如果步驟3中線程數量達到最大值,則拒絕新任務。

fixedthreadpool

executor executor = executors.

newfixedthreadpool(3

);//引數為執行緒數

它是一種執行緒數量固定的執行緒池,當執行緒處於空閒狀態時,它們不會被**,除非關閉執行緒池。

因為它只有核心執行緒且不會被**,這意味著它能更快地響應外界請求。

cachedthreadpool

executor executor1 = executors.

newcachedthreadpool()

;

它是一種執行緒數量不定的執行緒池,它只有非核心執行緒,最大執行緒數為integer.max_value。當執行緒池中的執行緒都處於活動狀態時,會建立新的執行緒來處理新任務,否則會利用空閒執行緒處理新任務。超過60s,空閒執行緒會被**。

schedulethreadpool

executor executor2= executors.

newscheduledthreadpool(3

);//核心執行緒數

它的核心執行緒固定的,非核心執行緒是沒有限制的,即maximumpoolsize為integer.max_value,非核心執行緒空閒時會立即**,主要用於執行定時任務和具有固定週期的任務。

singlethreadpool

executor executor3 = executors.

newsinglethreadexecutor()

;

該執行緒內部只有乙個核心執行緒,它確保所有任務都在同乙個執行緒中按順序執行。singlethreadpool的意義在一同意所有的外界任務到同乙個執行緒中,使得這些任務不需要處理執行緒同步的問題。

其它執行緒

可以通過改變threadpoolexecutor的引數按需求構造你的執行緒。

Android 執行緒池的說明與使用

blockingqueue的實現都是執行緒安全的,子類如下 synchronousqueue linkedblockingqueue linkedblockingdeque arrayblockingqueue delayqueue priorityblockingqueue。synchronous...

Android執行緒池的使用

一 執行緒池介紹 1.1原理 executor是乙個介面,只有乙個方法void execute runnable command 真正的執行緒的實現為threadpoolexecutor。threadpoolexecutor繼承了abstractexecutorservice,abstractexe...

Android執行緒池的使用

一 執行緒池的優點 說到執行緒池的優點就要先說一下不用執行緒池的壞處 使用執行緒池的好處 二 執行緒池的使用 1.執行緒池的引數 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,tim...