Executors類中建立執行緒池的幾種方法的分析

2021-08-07 21:46:14 字數 2801 閱讀 2027

要配置乙個執行緒池是比較複雜的,尤其是對於執行緒池的原理不是很清楚的情況下,很有可能配置的執行緒池不是較優的,因此在executors類裡面提供了一些靜態工廠,生成一些常用的執行緒池。

1、newfixedthreadpool:建立固定大小的執行緒池。執行緒池的大小一旦達到最大值就會保持不變,如果某個執行緒因為執行異常而結束,那麼執行緒池會補充乙個新執行緒。

/*

函式功能:建立乙個固定長度的的執行緒池,用於儲存任務的阻塞隊列為無限制長度的linkedblockingqueue。

執行緒池中的執行緒將會一直存在除非執行緒池shutdown,即執行緒池中的執行緒沒有受到存活時間的限制。

*/public

static executorservice newfixedthreadpool(int nthreads)

/*函式功能:建立指定執行緒數的執行緒池,並且指定了執行緒工廠來生產新的執行緒。任務佇列無界。

*/public

static executorservice newfixedthreadpool(int nthreads, threadfactory threadfactory)

2、newcachedthreadpool:建立乙個可快取的執行緒池。如果執行緒池的大小超過了處理任務所需要的執行緒,那麼就會**部分空閒(60秒不執行任務)的執行緒,當任務數增加時,此執行緒池又可以智慧型的新增新執行緒來處理任務。此執行緒池不會對執行緒池大小做限制,執行緒池大小完全依賴於作業系統(或者說jvm)能夠建立的最大執行緒大小。

在executors類中此方法的**如下:

/*

函式功能:建立乙個執行緒池,這個執行緒池的corepoolsize的大小為零,maxpoolsize為integer.max_value.

即對於執行緒池,只要需要就可以建立新的執行緒。不過如果有空閒執行緒存在則就會重用此執行緒。

此執行緒池的執行緒都有一定的存活時間。即如果執行緒已經有60s沒有被使用則就會被移除執行緒池。

*/public

static executorservice newcachedthreadpool()

//與上面的功能一樣,只是指定了執行緒工廠。

public

static executorservice newcachedthreadpool(threadfactory threadfactory)

3、newsinglethreadexecutor:建立乙個單執行緒的執行緒池。這個執行緒池只有乙個執行緒在工作,也就是相當於單執行緒序列執行所有任務。如果這個唯一的執行緒因為異常結束,那麼會有乙個新的執行緒來替代它。此執行緒池保證所有任務的執行順序按照任務的提交順序執行。

//建立乙個單工作執行緒且無邊界的佇列的執行緒池。如果執行期間此執行緒掛掉了,則如果需要就會產生乙個新執行緒來順序執行任務。

//任何時候都不會有超過乙個執行緒是存活的

public

static executorservice newsinglethreadexecutor()

/*函式功能:與newsinglethreadexecutor()功能一樣,只是指定了執行緒工廠來生產新的執行緒。

*/public

static executorservice newsinglethreadexecutor(threadfactory threadfactory)

4、newscheduledthreadpool:建立乙個大小無限的執行緒池。此執行緒池支援定時以及週期性執行任務的需求。

//建立乙個執行緒池,該執行緒池提供延時執行任務或者是週期性執行任務的功能。

public

static scheduledexecutorservice newscheduledthreadpool(int corepoolsize)

public

static scheduledexecutorservice newscheduledthreadpool(

int corepoolsize, threadfactory threadfactory)

scheduledthreadpoolexecutor 類中的建構函式如下:

/*

函式功能:根據指定的corepoolsize的大小來建立執行緒池,maxpoolsize的大小為integer.max_value,執行緒沒有存活時間的限制

*/public

scheduledthreadpoolexecutor(int corepoolsize)

5、newsinglethreadscheduledexecutor:建立乙個單執行緒的執行緒池。此執行緒池支援定時以及週期性執行任務的需求。

//建立乙個單執行緒的執行緒池,提供任務延時執行或週期性執行的功能。

public

static scheduledexecutorservice newsinglethreadscheduledexecutor()

public

static scheduledexecutorservice newsinglethreadscheduledexecutor(threadfactory threadfactory)

scheduledthreadpoolexecutor 類中的建構函式如下:

/*

函式功能:根據指定的corepoolsize的大小來建立執行緒池,maxpoolsize的大小為integer.max_value.

*/public

scheduledthreadpoolexecutor(int corepoolsize)

以上幾種建立執行緒池的方法我們都需要有乙個大體的影響哈。

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

executors靜態工廠建立幾種常用執行緒池 1.建立了乙個固定執行緒數量的執行緒池,可以控制線程最大併發數,超出的執行緒會在佇列中等待。newfixedthreadpool int nthreads 執行緒池中線程數量是要指定傳入的,注意在固定大小的執行緒池中使用的阻塞佇列是linkedbloc...

Executors類中建立執行緒池的幾種方法的分析

要配置乙個執行緒池是比較複雜的,尤其是對於執行緒池的原理不是很清楚的情況下,很有可能配置的執行緒池不是較優的,因此在executors類裡面提供了一些靜態工廠,生成一些常用的執行緒池。1 newfixedthreadpool 建立固定大小的執行緒池。執行緒池的大小一旦達到最大值就會保持不變,如果某個...

executors建立執行緒池

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