三、 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:1start1604731505456: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 需要大量的執行緒來完成任務,...