Android多執行緒(五) 執行緒池的使用

2021-10-04 05:29:26 字數 2118 閱讀 8424

執行緒池是儲存了一定量執行緒的區域,能夠對執行緒進行簡單的管理,支援迴圈執行和定時執行,使用執行緒池能夠減少執行緒建立和銷毀時的開銷。在例項化threadpoolexecutor時通過配置6個引數來實現不同功能的執行緒池。

引數作用

corepoolsize

核心執行緒數

maximumpoolsize

最大執行緒數 = 核心執行緒數+非核心執行緒數

keepalivetime

當執行緒數大於核心執行緒數時,等待keepalivetime時間後會**非核心執行緒

unit

keepalivetime 的單位

workqueue

待執行的任務佇列

factory

執行建立新執行緒

handler

任務佇列滿或者無法執行時候通知呼叫者。

遵循規則

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

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

如果任務佇列已滿,且未達到最大執行緒數,會啟動乙個非核心執行緒來執行任務佇列中的任務。

如果執行緒池中的最大執行緒數達到執行緒池規定的最大值,那麼執行緒池就會拒絕執行此任務,並通過handler引數告知呼叫者。

核心執行緒預設無超時機制,可呼叫allowcorethreadtimeout方法設定核心執行緒是否可有超時機制。

class threadpool 

) queue.

add(runnable

) threadpool.

execute

threadpool.

shutdown()

}}

定長線程池 fixledthreadpool

池內的執行緒數固定,執行緒處於空閒不會自動**,執行緒不夠時也不會重新去建立,未執行的任務只等等待執行緒空置。

public

static executorservice newfixedthreadpool

(int nthreads)

可快取執行緒池 cachedthreadpool

無核心執行緒數,執行緒最大數量為2^31-1,可看作執行緒數任意大。空閒執行緒有超時機制,超過了60秒就會被**。適用於執行大量耗時較少的任務,執行完畢後後會**所有執行緒。

public

static executorservice newcachedthreadpool()

定時執行緒池 scheduledthreadpool

核心執行緒數固定,非核心執行緒數任意大。當核心執行緒不夠用並且任務佇列已滿,就立即建立非核心執行緒,非核心執行緒執行完畢就等待10毫秒被**。scheduledthreadpool有自己的實現類。

public

static scheduledexecutorservice newscheduledthreadpool

(int corepoolsize)

public

scheduledthreadpoolexecutor

(int corepoolsize)

//延遲5秒執行

scheduledthreadpool.

schedule(,

5,timeunit.seconds)

//週期執行初始延遲3秒,後每隔1秒執行一次

scheduledthreadpool.

scheduleatfixedrate(,

3,1,timeunit.seconds)

單執行緒執行緒池 singlethreadpool

只有乙個核心執行緒,且不可以建立非核心執行緒,沒有超時機制。確保所有任務在同乙個執行緒池中順序執行。

public

static executorservice newsinglethreadexecutor()

Java多執行緒學習筆記(五)執行緒池

一 執行緒池的基本類 executors 執行緒池工廠,通過 executors 可以取得乙個擁有特定功能的執行緒池。threadpoolexecutor 執行緒池,實現了executor 介面,因此通過這個介面,任何 runnable物件都可以被 threadpoolexecutor執行緒池排程。...

多執行緒(五) 執行緒的通訊

例題 使用兩個執行緒列印1 100。執行緒1,執行緒2交替列印。執行緒通訊的例子 使用兩個執行緒列印1 100.執行緒1,執行緒2,交替列印。class number implements runnable catch interruptedexception e system.out.printl...

linux多執行緒學習筆記五 執行緒安全

一,執行緒安全基礎 乙個函式被稱為執行緒安全的當且僅當被多個併發執行緒反覆呼叫時,它會一直產生正確的結果。我們能夠定義出四類執行緒不安全函式。第一類 不保護共享變數的函式 共享變數在多執行緒中是共享資料,可以通過同步機制來保護共享資料。第二類 保護跨越多個呼叫狀態的函式 乙個偽隨機數生成器是乙個簡單...