javaSE 多執行緒之執行緒池

2021-08-19 18:42:19 字數 3053 閱讀 3171

1) 使用語法

publicstaticvoiduseexecutorservice()

});}

executorservice

.shutdown();

}輸出:

pool-1-thread-3

pool-1-thread-2

pool-1-thread-1

pool-1-thread-3

pool-1-thread-2

executorservice 用來管理執行緒池,建立的時候指定了最多有三個執行緒,每執行一次

execute

就會啟動乙個執行緒,如果已達到

3個了,就等待。

呼叫shutdown後表示啟動乙個關閉命令,不再接受新任務,執行緒執行完後自動**。

2) 執行緒池物件型別

執行緒池物件

說明newcachedthreadpool

-快取型池子,先檢視池中有沒有以前建立的執行緒,如果有,就

reuse.

如果沒有,就建乙個新的執行緒加入池中

-快取型池子通常用於執行一些

生存期很短的非同步型任務

因此在一些面向連線的daemon

型server

中用得不多。

-能reuse

的執行緒,必須是

timeout idle

內的池中線程,預設

timeout

是60s,

超過這個

idle

時長,執行緒例項將被終止及移出池。

注意,放入cachedthreadpool

的執行緒不必擔心其結束,超過

timeout

不活動,其會自動被終止。

newfixedthreadpool

任意時間點,最多只能有固定數目的活動執行緒存在,此時如果有新的執行緒要建立,只能放在另外的佇列中等待,直到當前的執行緒中某個執行緒終止直接被移出池子。

fixedthreadpool多數針對一些很穩定很固定的正規併發執行緒,多用於伺服器。

scheduledthreadpool

-排程型執行緒池

-這個池子裡的執行緒可以按

schedule

依次delay

執行,或週期執行

singlethreadexecutor

-單例執行緒,任意時間池中只能有乙個執行緒

-用的是和

cache

池和fixed

池相同的底層池,但執行緒數目是

1-1,0

秒idle

(無idle

)3) 方法

① isshutdown

boolean

isshutdown()

如果此執行程式已關閉,則返回

true。② 

isterminated

boolean

isterminated()

如果關閉後所有任務都已完成,則返回

true

。注意,除非首先呼叫

shutdown 

或shutdownnow

,否則isterminated 

永不為true。③ 

awaittermination

boolean 

awaittermination

(long timeout,timeunit unit) throws interruptedexception

等待(阻塞)直到關閉或最長等待時間或發生中斷

引數:timeout - 最長等待時間

unit - timeout 引數的時間單位

返回:如果此執行程式終止,則返回

true

;如果終止前超時期滿,則返回

false 

丟擲:interruptedexception - 如果等待時發生中斷

④ submit

future

submit

(callabletask)

提交乙個返回值的任務用於執行,返回乙個表示任務的未決結果的

future

。等等。。。。。。篇幅有限,方法略

4) 使用引數

例如說,我有20張票,分四個執行緒去賣,如何將這些資訊傳給各執行緒,並能不重複賣掉。

publicstaticvoiduseexecutorservice()catch(interruptedexception e)

system.out

.println(thread.

currentthread

().getname() +

" : "

+ index_begin

+ "-"

+ index_end);}

});}

system.out

.println(

"useexecutorservice end"

);executorservice

.shutdown();

}定義了四個執行緒,通過for迴圈來執行四次執行緒,這樣剛好啟動了四個執行緒。

每個執行緒在定義的時候就會使用兩個變數,每次迴圈時變數值不一樣,這樣每個執行緒都有自己的引數。

輸出:useexecutorservice start

useexecutorservice end

pool-1-thread-3 : 11-15

pool-1-thread-1 : 1-5

pool-1-thread-2 : 6-10

pool-1-thread-4 : 16-20

可見輸出正是我們想要的結果。這裡的關鍵點就在於index_begin,index_end

execute(newrunnable()  

thread.

sleep

(1000);    

多執行緒之執行緒池

執行緒框架關係 executor 介面 executorservice 介面 繼承 executor abstractexecutorservice 抽象類 實現 executorservice threadpoolexecutor 繼承abstractexecutorservice 過載一系列方法...

多執行緒之執行緒池

首先說一說執行緒池的優點 方便管理,監控執行緒狀態 提高執行緒響應速度 執行緒可以重複使用 executorservice普通排程池核心介面 submit runnable callable future execute runnable void 執行緒池工作流程 當任務到達執行緒池時的工作順序,...

JAVA多執行緒之 執行緒池

執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...