執行緒池的種類

2021-09-24 20:57:40 字數 1769 閱讀 5654

一般建立簡單的執行緒池都是通過executors這個類的靜態方法建立的,但是可能大公司要求根據threadpoolexecutor 去建立執行緒池:因為使用threadpoolexecutor 更加明確執行緒池的執行規則,規避資源耗盡的風險。具體根據公司來…

簡單的執行緒池包括如下四個組成部分即可:

我們按照順序看看這些靜態方法建立的執行緒池作用:

我們首先了解一下threadpoolexecutor的乙個構造方法;

建立固定大小的執行緒池。核心數和最大數是一樣的,任務如果過多會在佇列中阻塞.如果某個執行緒因為執行異常而結束,那麼執行緒池會補充乙個新執行緒。

1.8新加的執行緒池,forkjoinpool 可以根據cpu的核數並行的執行,適合使用在很耗時的操作,可以充分的利用cpu執行任務,

任務竊取執行緒池,不保證執行順序,適合任務耗時差異較大。

執行緒池中有多個執行緒佇列,有的執行緒佇列中有大量的比較耗時的任務堆積,而有的執行緒佇列卻是空的,就存在有的執行緒處於飢餓狀態,當乙個執行緒處於飢餓狀態時,它就會去其它的執行緒佇列中竊取任務。解決飢餓導致的效率問題。

預設建立的並行 level 是 cpu 的核數。主線程結束,即使執行緒池有任務也會立即停止。

建立乙個單執行緒的執行緒池。這個執行緒池的核心數和最大數都是1,也就是相當於單執行緒序列執行所有任務。如果這個唯一的執行緒因為異常結束,那麼會有乙個新的執行緒來替代它。此執行緒池保證所有任務的執行順序按照任務的提交順序執行。

建立乙個可快取的執行緒池。核心數是0,最大數是 integer.max_value,如果一下子任務很多,且執行時間長,容易發生異常,堆溢位,且執行效率降低,並不是執行緒數目越多,執行越快的,如果執行緒池的大小超過了處理任務所需要的執行緒,那麼就會**部分空閒(60秒不執行任務)的執行緒,當任務數增加時,此執行緒池又可以智慧型的新增新執行緒來處理任務。此執行緒池不會對執行緒池大小做限制,執行緒池大小完全依賴於作業系統(或者說jvm)能夠建立的最大執行緒大小。

支援週期性任務的排程。此執行緒池支援定時以及週期性執行任務的需求。按道理來說執行緒池的最大數是 integer.max_value,但是,執行緒數並不會超過核心數…是固定長度的.

我一下子提交5000個任務,但是列印的執行緒名稱只有三個::

執行緒池的種類有哪些?

目錄 一 可快取執行緒池 newcachedthreadpool 二 指定工作執行緒的執行緒池 newfixedthreadpool 三 定時的執行緒池newscheduledthreadpool 四 單執行緒執行緒池 newsinglethreadexecutor 建立乙個可根據需要建立新執行緒的...

執行緒池的種類和使用場景

newcachedthreadpool newfixedthreadpool newsinglethreadexecutor newscheduledthreadpool 執行緒池任務執行流程 當執行緒池小於corepoolsize時,新提交任務將建立乙個新執行緒執行任務,即使此時執行緒池中存在空閒...

執行緒池的種類,區別和使用場景

newcachedthreadpool public static executorservice newcachedthreadpool newfixedthreadpool public static executorservice newfixedthreadpool int nthreads...