執行緒池學習

2021-10-10 07:58:49 字數 3737 閱讀 6765

三、 threadpoolexecutor

四、 擴充套件執行緒池

總結在使用所執行緒進行開發時,為了避免系統頻繁地建立和銷毀執行緒,我們可以使用執行緒池技術。

executors類扮演著執行緒工廠的角色,使用該類的靜態方法可以獲取特點功能的執行緒池。

該方法返回固定執行緒數量的執行緒池。linkedblockingqueue

public

static

class

mytask

implements

runnable

catch

(interruptedexception e)

system.out.

println

(threadname+

"end");

}}public

static

void

main

(string[

] args)

system.out.

println

("main:"

+thread.

currentthread()

.getid()

+"end");

}

main:1start

1604731505456:thread id:11start

1604731505456:thread id:12start

1604731505456:thread id:12end

1604731506473:thread id:12start

1604731505456:thread id:11end

1604731506473:thread id:12end

main:1end

該方法返回乙個只有乙個執行緒的執行緒池。linkedblockingqueue

該方法返回乙個可根據實際情況調整執行緒數量的執行緒池。當開啟10個執行緒時,通過id可知,執行緒池中加有10個執行緒,該方法會根據cpu的資源占用自動調整執行緒池的大小。synchronousqueue

public

static

void

main

(string[

] args)

trycatch

(interruptedexception e)

}

該方法返回乙個scheduledexecutorservice物件,執行緒池大小為1。可以實現執行緒週期性執行和延遲執行。

該方法返回乙個scheduledexecutorservice物件,可指定執行緒池的執行緒數量。

/**

command:任務

delay:延遲時間

timeunit:單位 給定單元粒度的時間段

**/schedule

(runnable command,

long delay, timeunit unit)

;/**

command:任務

initialdelay:初始延遲時間

period:週期的時間

unit:單位

第一次:initialdelay+0*period

第二次:initialdelay+1*period

...**/

scheduleatfixedrate

(runnable command,

long initialdelay,

long period,timeunit unit)

/**command:任務

initialdelay:初始延遲時間

delay:延遲時間

第一次:initialdelay

第二次:第一次的結束時間+delay

**/schedulewithfixeddelay

(runnable command,

long initialdelay,

long delay,timeunit unit)

注意:任務遇到異常,後續的所有子任務都會停止排程。

以上介紹的執行緒池都是基於threadpoolexecutor類的封裝

threadpoolexecutor

(int corepoolsize,

//指定執行緒池中的執行緒數量

int maximumpoolsize,

//指定執行緒池中的最大執行緒數

long keepalivetime,

/** 當執行緒池中的執行緒數超過corepoolsize,

多餘空閒執行緒的存活時間

**/timeunit unit,

//時間單位

blockingqueue

workqueue,

//任務佇列

threadfactory threadfactory,

//執行緒工廠

rejectedexecutionhandler handler)

//決絕策略

workqueue:提交但未執行的任務佇列。

handler:拒絕策略,當任務數量超過了系統的負載,就會使用到拒絕策略。

threadfactory:執行緒工廠是乙個介面。只定義了乙個用來建立執行緒的方法。

public

inte***ce

threadfactory

threadpoolexecutor 是乙個可以擴充套件的執行緒池。它提供了beforeexecutor()、afterexecutor()/terminated()三個介面用來對執行緒池進行控制。

public

class

mythreadpool

@override

public

void

run(

)catch

(interruptedexception e)}}

public

static

void

main

(string[

] args)

throws interruptedexception

@override

protected

void

afterexecute

(runnable r, throwable t)

@override

protected

void

terminated()

};for(

int i=

0;i<

5;i++

) es.

shutdown()

;}}

越學習,自己越渺小…剛步入多執行緒的學習大軍,希望大家一起學習一起進步。

執行緒池學習

執行緒池的基本原理 在傳統伺服器中,常有乙個總監聽程序監聽有無新的使用者連線伺服器,每當有乙個新的使用者接入,伺服器就開啟乙個新的執行緒使用者處理這個使用者的資料報,這個執行緒只服務於這個使用者,當使用者與伺服器端關閉連線以後,伺服器端銷毀這個執行緒。然而,頻繁的開啟與關閉服務程序極大的占用系統資源...

執行緒池學習

threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,blockingqueueworkqueue,threadfactory threadfactory,rejectedex...

執行緒池學習

執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後自動啟動這些任務。1.減少在建立和銷毀執行緒上所花的時間以及系統資源的開銷 2.避免因系統建立大量執行緒而導致消耗完系統記憶體的情況出現 這裡模擬資料庫連線池,這種 池 的作用一般就是兩點 1 需要大量的執行緒來完成任務,...