安卓執行緒池理解

2021-10-24 22:28:03 字數 2142 閱讀 3799

在安卓開發中經常會遇到處理多張,或者分片上傳等需要使用多執行緒的情況,如果簡單的通過new thread建立執行緒,會造成執行緒的頻繁建立和銷毀,占用大量的資源。並且頻繁的呼叫gc機制,這會使效能降低,又非常耗時。

最基本的threadpoolexecutor

1 通過構造方法,建立最基本的執行緒池,這也是引數最多,允許使用者自己設定

threadpoolexecutor threadpoolexecutor=

newthreadpoolexecutor(2

,//核心執行緒數量4,

//該執行緒池內最大執行緒數量

100,

//非核心執行緒保活時間

timeunit.seconds,

//非核心執行緒保活時間單位

newlinkedblockingdeque

(2),

//執行緒佇列(佇列中允許最大執行緒數量)

newthreadpoolexecutor.abortpolicy()

//執行緒數量超過限制時,拒絕策略。預設丟擲異常

);

2 建立執行緒池之後,為了方便檢視當前執行緒的資訊,自定義乙個執行緒

class

mythread

implements

runnable

@override

public

void

run(

)catch

(interruptedexception e)

log.e(

"syw"

,"執行緒:"

+thread.

currentthread()

.getname()

+" 執行:"

+name +

" run");

}}

3 使用執行緒池的方法,執行多個任務

// 2個核心執行緒

// 6-2=4個任務將進入linkedblockingdeque佇列,但是佇列只能排進2個,所以新建立2個執行緒

// 核心執行緒數2+新建立的執行緒2如果超過執行緒池內最大執行緒數,在當前拒絕策略下會丟擲異常

for(

int i =

0; i <

6; i++

)}

4 執行結果

5 結果分析

6 執行順序

首先是核心執行緒1和核心執行緒2立刻執行執行緒0、執行緒1。

然後執行緒2、執行緒3進入佇列,等待核心執行緒執行完成。

新建立的非核心執行緒3和非核心執行緒4立刻執行執行緒4、執行緒5

所以執行的順序是0-1-4-5-2-3(執行緒的執行順序是隨機的0/1可能互換,4/5可能互換,2/3可能互換)

,//核心執行緒數量4,

//該執行緒池內最大執行緒數量

100,

//非核心執行緒保活時間

timeunit.seconds,

//非核心執行緒保活時間單位

newlinkedblockingdeque

(2),

//執行緒佇列(佇列中允許最大執行緒數量)

// new threadpoolexecutor.abortpolicy()//預設策略。執行緒數量超過限制時,拒絕策略,丟擲異常

// new threadpoolexecutor.discardpolicy()//執行緒數量超過限制時,丟掉多餘任務

// new threadpoolexecutor.discardoldestpolicy()//執行緒數量超過限制時,丟掉先進入佇列的任務

// new threadpoolexecutor.callerrunspolicy()//執行緒數量超過限制時,新增任務佇列失敗,主線程執行該任務。然後才會繼續新增任務

);如果執行緒數超過6(最大執行緒數4+佇列最大值2)

安卓 多執行緒

方法1 建立單獨的執行緒 new thread new runnable start 方法2 利用執行緒池 private executorservice executorservice executors.newfixedthreadpool 4 上面是建立乙個固定大小的執行緒池,這裡面的執行緒不...

安卓 多執行緒

第一種實現子執行緒的方法 繼承thread類 private class mythread extends thread new mythread start 第二種實現子執行緒的方式 實現runnable 任務 介面 private class myrunnable implements runn...

理解執行緒池

建立執行緒池的一種方式 threadpoolexecutor threadpoolexecutor new threadpoolexecutor corepoolsize,maximumpoolsize,keepalivetime,unit,workqueue,threadfactory,handl...