執行緒及執行緒池的幾種建立方法

2021-09-24 15:08:53 字數 1362 閱讀 8251

jdk8提供了五種建立執行緒池的方法:

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

public

static executorservice newfixedthreadpool

(int nthreads)

特點:

2.(jdk8新增)會根據所需的併發數來動態建立和關閉執行緒。能夠合理的使用cpu進行對任務進行併發操作,所以適合使用在很耗時的任務

public

static executorservice newworkstealingpool

(int parallelism)

什麼是forkjoinpool:

public

forkjoinpool

(int parallelism,

forkjoinworkerthreadfactory factory,

uncaughtexceptionhandler handler,

boolean asyncmode)

使用乙個無限佇列來儲存需要執行的任務,可以傳入執行緒的數量;不傳入,則預設使用當前計算機中可用的cpu數量;使用分治法來解決問題,使用fork()和join()來進行呼叫。其內部實現了work-stealing演算法.用於平衡執行緒的工作量。

優點:充分利用執行緒進行平行計算,減少執行緒間的競爭。

缺點:在某些情況下還是會存在競爭,比如雙端佇列裡只有乙個任務時。並且該演算法會消耗更多的系統資源, 比如建立多個執行緒和多個雙端佇列。

3.建立乙個可快取的執行緒池,可靈活**空閒執行緒,若無可**,則新建執行緒。

public

static executorservice newcachedthreadpool()

特點:

4.建立乙個單執行緒的執行緒池。

public

static executorservice newsinglethreadexecutor()

特點:

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

public

static scheduledexecutorservice newscheduledthreadpool()

特點:

執行緒池建立方式及執行緒池原理

執行緒池提交任務時的執行順序如下 向執行緒池提交任務時,會首先判斷執行緒池中的執行緒數是否大於設定的核心執行緒數,如果不大於,就建立乙個核心執行緒來執行任務。如果大於核心執行緒數,就會判斷緩衝佇列是否滿了,如果沒有滿,則放入佇列,等待執行緒空閒時執行任務。如果佇列已經滿了,則判斷是否達到了執行緒池設...

執行緒池建立

executors執行緒池建立,主要包含以下幾種方式 1 第一種 測試 提交15個執行時間需要3秒的任務,看執行緒池的狀況 param threadpoolexecutor 傳入不同的執行緒池,看不同的結果 throws exception public void testcommon thread...

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

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