執行緒池 Executors類建立執行緒池

2021-09-21 18:11:50 字數 3799 閱讀 6832

executors靜態工廠建立幾種常用執行緒池

1.建立了乙個固定執行緒數量的執行緒池,可以控制線程最大併發數,超出的執行緒會在佇列中等待。

newfixedthreadpool

(int nthreads)

//執行緒池中線程數量是要指定傳入的,注意在固定大小的執行緒池中使用的阻塞佇列是linkedblockingqueue,無界阻塞佇列。

public

static executorservice newfixedthreadpool

(int nthreads)

public

static executorservice newfixedthreadpool

(int nthreads, threadfactory threadfactory)

2.建立了乙個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有的任務按照指定的順序(fifo, lifo, 優先順序)來執行的。

初始化的執行緒池中只有乙個執行緒,如果該執行緒異常結束,會重新建立乙個新的執行緒繼續執行任務,唯一的執行緒可以保證所提交任務的順序執行,內部使用linkedblockingqueue作為阻塞佇列

newsinglethreadexecutor()

//核心執行緒數和最大執行緒數都為1

public

static executorservice newsinglethreadexecutor()

public

static executorservice newsinglethreadexecutor

(threadfactory threadfactory)

3.建立了乙個可快取的執行緒池,如果執行緒池的長度超過處理需要,它可靈活**空閒執行緒,若無可**,則新建執行緒。

預設存活時間60秒,執行緒池的執行緒數可達到integer.max_value,即2147483647,內部使用synchronousqueue作為阻塞佇列;新增乙個任務即有乙個執行緒處理,或者復用之前空閒的執行緒,或者重親啟動乙個執行緒,但是一旦乙個執行緒在60秒內一直處於等待狀態時(也就是一分鐘無事可做),則會被終止

在沒有任務執行時,當執行緒的空閒時間超過keepalivetime,則工作執行緒將會終止,當提交新任務時,如果沒有空閒執行緒,則建立新執行緒執行任務,會導致一定的系統開銷

newcachedthreadpool()

public

static executorservice newcachedthreadpool()

public

static executorservice newcachedthreadpool

(threadfactory threadfactory)

4.建立了乙個單執行緒的定時任務排程執行緒池

newsinglethreadscheduledexecutor()

public

static scheduledexecutorservice newsinglethreadscheduledexecutor()

public

static scheduledexecutorservice newsinglethreadscheduledexecutor

(threadfactory threadfactory)

5.建立了乙個定長線程池,支援定時及週期性的任務執行。(定時排程執行緒池)

初始化的執行緒池可以在指定的時間內週期性的執行所提交的任務,在實際的業務場景中可以使用該執行緒池定期的同步資料。

newscheduledthreadpool

(int corepoolsize)

public

static scheduledexecutorservice newscheduledthreadpool

(int corepoolsize)

public

static scheduledexecutorservice newscheduledthreadpool

(int corepoolsize, threadfactory threadfactory)

public

static

void

newfixedthreadpooldemo()

});}

//shutdown方法只是發出了停止訊號,

// 等所有執行緒執行完畢會關閉執行緒池;而shutdownnow則是立即停止所有任務。

fixedthreadpool.

shutdown()

;}

fixedthreadpool is starting

1 pool-1-thread-2

5 pool-1-thread-2

6 pool-1-thread-2

7 pool-1-thread-2

8 pool-1-thread-2

9 pool-1-thread-2

10 pool-1-thread-2

0 pool-1-thread-1

11 pool-1-thread-2

13 pool-1-thread-2

14 pool-1-thread-2

12 pool-1-thread-1

3 pool-1-thread-4

2 pool-1-thread-3

4 pool-1-thread-5

這是建立乙個指定數量執行緒的執行緒池,使用newfixedthreadpool方法傳入5個執行緒個數,從結果也可以看出是5個執行緒在併發執行,注意返回型別是executorservice。還使用了execute()方法提交執行緒。

(2)newsinglethreadexecutordemo:

//建立單執行緒的執行緒池,乙個乙個執行緒的執行

單執行緒的執行緒池,只有乙個執行緒在執行。

(3)newcachedthreadpooldemo:

//建立乙個可快取的執行緒池   當執行緒池長度超過所需要的長度,則會收起空閒執行緒

//週期性的

public

static

void

newsecheduledthreadpooldemo()

},3, timeunit.seconds)

;

方法注意:

scheduledexecutorservice#scheduleatfixedrate()指的是「以固定的頻率」執行,period(週期)指的是兩次成功執行之間的時間;

scheduledexecutorservice#schedulewithfixeddelay() 指的是「以固定的延時」執行,delay(延時)指的是一次執行終止和下一次執行開始之間的延遲;

executors建立執行緒池

private static final executor exec executors.newfixedthreadpool 50 runnable runnable new runnable exec.execute runnable callablecallable new callable ...

Executors建立執行緒池

兩個靜態方法 executorservice exec executors.newcachethreadpool 這個方式會為每個任務建立乙個執行緒。executorservice exec executors.newfixedthreadpool 10 建立10個執行緒的執行緒池。執行某個實現ru...

用Executors工具類建立執行緒池

多執行緒技術主要解決處理器單元內多個執行緒執行的問題,它可以顯著減少處理器單元的閒置時間,增加處理器單元的吞吐能力。執行緒池主要用來解決執行緒生命週期開銷問題和資源不足問題。通過對多個任務重用執行緒,執行緒建立的開銷就被分攤到了多個任務上了,而且由於在請求到達時執行緒已經存在,所以消除了執行緒建立所...