1. 程式人生 > >幾種常用的執行緒池threadpool

幾種常用的執行緒池threadpool

我們知道一個系統一般不可能只有一個執行緒,而根據系統的伺服器等硬體水平,我們可以合理的利用多執行緒來快速的完成我們所需要的功能。而對於系統而言,如果頻繁的建立和銷燬執行緒,也會給系統帶來相當大的負擔,所以我們平時都是利用執行緒池來解決這一點。

執行緒池的作用:

1)減少建立和銷燬執行緒的次數,每個工作執行緒可以多次使用2)可根據系統情況調整執行的執行緒數量,防止消耗過多記憶體

java的執行緒池都是來自executor介面,共有4種常見執行緒池,分別能適用於幾種常見的系統,下面是executor的實現類threadpoolExecutor的 其中一個構造方法:

public ThreadPoolExecutor(int 
corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

其實這就是構造一個執行緒池所需要的所有引數了,我們來介紹一下這些引數:

corePoolSize:該執行緒池中核心執行緒的最大數量,核心執行緒其實很好理解,就是你創的執行緒不超過這個數量,就是核心執行緒,而超過了就不是核心執行緒了
int maximumPoolSize:執行緒池的最大執行緒數量 ,這個不用我說明了吧
long keepAliveTime:非核心執行緒的存貨時間,也就是當一個非核心執行緒被建立,使用完歸還給執行緒池它沒有被利用一定時間,便會被銷燬 
TimeUnit unit:上面的時間單位(時分秒)
BlockingQueue<Runnable> workQueue:該執行緒池的等待佇列,當執行緒池滿了,執行緒就會放入這個佇列中,後面會詳細講一下這個佇列滿了的情況
ThreadFactory threadFactory:建立執行緒的方式(我也不太明白,但我沒用過)
RejectedExecutionHandler handler:它是一個異常捕獲器,專門用來拋異常

這就是建立一個執行緒池的所有引數了,下面是常用的四種執行緒池,它們都是基於Executor介面的實現類executor:

①newSingleThreadExecutor

單個執行緒的執行緒池,即執行緒池中每次只有一個執行緒工作,單執行緒序列執行任務,也就是說只有一個核心執行緒,所有操作都通過這一個執行緒來進行②newFixedThreadExecutor(n)固定數量的執行緒池,沒提交一個任務就是一個執行緒,直到達到執行緒池的最大數量,然後後面進入等待佇列直到前面的任務完成才繼續執行③newCacheThreadExecutor(推薦使用)可快取執行緒池,當執行緒池大小超過了處理任務所需的執行緒,那麼就會回收部分空閒(一般是60秒無執行)的執行緒,當有任務來時,又智慧的新增新執行緒來執行。④newScheduleThreadExecutor大小無限制的執行緒池,支援定時和週期性的執行執行緒

這就是常用的幾種執行緒池了,下面說一下如果等待的任務超出了佇列也就是blockingQueue的大小(其實很難超過),會發生什麼:

如果執行緒池中的執行緒數量已經到達了執行緒池的最大容量,那麼接續的任務會被放到blockingQueue中,這個佇列是有大小限制的,如果超過了它的限制,那麼blockingqueue會返回失敗。

相關推薦

iOS常用執行鎖學習與總結。

開始前,先建立3個執行緒執行的任務。- (void)method1 { NSLog(@"%@", @"執行緒1"); } - (void)method2 { NSLog(@"%@", @"執行緒2"); } - (void)method3 { NS

百度面試題之 啟動執行方式有哪執行有哪

1、啟動執行緒方式: 要啟動的可以分為兩類:返回結果和不返回結果。對於這兩種,也分別有兩種啟動執行緒的方式: 1)繼承Thread類,implements Runnable介面 2)實現Callable介面通過FutureTask包裝器來建立Thread執行緒、使用Ex

常用執行threadpool

我們知道一個系統一般不可能只有一個執行緒,而根據系統的伺服器等硬體水平,我們可以合理的利用多執行緒來快速的完成我們所需要的功能。而對於系統而言,如果頻繁的建立和銷燬執行緒,也會給系統帶來相當大的負擔,所以我們平時都是利用執行緒池來解決這一點。執行緒池的作用:1)減少建立和銷燬

Spring下配置常用連接

擴展 ade 不能 bcp thread helper facade 後者 lis 1、連接池概述  數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據

Java執行的認識、常用執行的分析

什麼是程式,什麼是程序,什麼是執行緒,他們有什麼區別?   程式是指令和資料的有序集合,其本身並沒有任何執行的含義,是一個靜態的概念。 程序是一個動態的過程,是一個活動的實體。簡單來說,一個應用程式得到執行就可以看作是一個程序。程序可以包含多個同時執行的執行緒。程序也是擁有系統

Java核心(二)深入理解執行ThreadPool

本文你將獲得以下資訊: 執行緒池原始碼解讀 執行緒池執行流程分析 帶返回值的執行緒池實現 延遲執行緒池實現 為了方便讀者理解,本文會由淺入深,先從執行緒池的使用開始再延伸到原始碼解讀和原始碼分析等高階內容,讀者可根據自己的情況自主選擇閱讀順序和需要了解的章節。 一、執行緒池優點

常用執行程式碼

執行緒池的介紹 1 常用的 池化技術 C3P0 DBCP 2 執行緒池的衍生 頻繁的建立執行緒物件和多執行緒之間進行上下文切換,是非常耗時間和資源的所以JDK1.5中提出了執行緒池技術 3 使用執行緒池 Exector 4 執行緒池的建立 1 建立一個固

美團面試題:Java-執行 ThreadPool 專題詳解

去美團面試,問到了什麼是執行緒池,如何使用,為什麼要用,以下做個總結。關於執行緒之前也寫過一篇文章《高階面試題總結—執行緒池還能這麼玩?》 1、什麼是執行緒池:  java.util.concurrent.Executors提供了一個 java.util.conc

Java 四常見執行解析

四種常見執行緒池   執行緒池用於管理執行緒的建立與銷燬,避免無用執行緒造成資源浪費,當需要建立多個執行緒時,我們往往需要一個管理者來管理這些執行緒,這也就引入了執行緒池的概念.Android中有四種較為常見的執行緒池也是我們使用最廣泛的執行緒池,Fixed

基於C++11的執行(threadpool),簡潔且可以帶任意多的引數(轉)

咳咳。C++11 加入了執行緒庫,從此告別了標準庫不支援併發的歷史。然而 c++ 對於多執行緒的支援還是比較低階,稍微高階一點的用法都需要自己去實現,譬如執行緒池、訊號量等。執行緒池(thread pool)這個東西,在面試上多次被問到,一般的回答都是:“管理一個任務佇列,一個執行緒佇列,然後每次取一個任務分

Java執行用法解析

本文為大家分析四種Java執行緒池用法,供大家參考,具體內容如下 http://www.jb51.net/article/81843.htm 1、new Thread的弊端 執行一個非同步任務你還只是如下new Thread嗎? new Thread(new Runn

java 常用執行介紹

一、執行緒池簡介 執行緒池就是預先建立好多n個空閒執行緒,節省了每次使用執行緒時都要去建立的時間,使用時只要從執行緒池中取出,用完之後再還給執行緒池。就像現在的共享經濟一樣,需要的時候只要去“借”,用完之後只需還回去就行。“池”的概念都是為了節省時間而建立的。 二、Exe

JAVA 常用執行

JAVA 固定執行緒池 FixedThreadPool 執行緒池介紹 Java通過Executors提供四種執行緒池: newCachedThreadPool 建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。

執行的工作原理與原始碼解讀及各常用執行執行流程圖

有時候花了大把時間去看一些東西卻看不懂,是很 “ 藍瘦 ” 的,花時間也是投資。 本文適合: 曾瞭解過執行緒池卻一直模模糊糊的人 瞭解得差不多卻對某些點依然疑惑的   隨著cpu核數越來越多,不可避免的利用多執行緒技術以充分利用其計算能力。所以,多執

JAVA多執行之——常用執行

執行緒池 學習了執行緒池的基本原理後,可以理解執行緒池的型別控制,主要是通過中心池大小,和最大執行緒池大小,以及儲存工作任務的佇列決定。JDK中為我們封裝了常用的四種執行緒池。 在JDK幫助文件中,有如此一段話: “強烈建議程式設計師使用較為方便的Exec

記憶體——第一章 常用的記憶體技術

#define EXTRA_BUFFER_SIZE        64 namespace easy {     template<class _Type,class _Alloc >     class EasyRingbuffer      {   

常見執行使用舉例

執行緒池 執行緒池:Executor 管理多個非同步任務的執行,而無需程式設計師顯式地管理執行緒的生命週期。這裡的非同步是指多個任務的執行互不干擾,不需要進行同步操作。 主要有四種執行緒池: 快取池 newCachedThreadPool建立一個可緩存執行緒池,如果執行緒池長度超過處理需要,可靈活

八、JAVA多執行執行原理以及自定義執行 ThreadPool

為什麼會需要執行緒池技術? (1)Thread是一個重量級的資源,它的建立,啟動以及銷燬都是比較耗費效能的;重複利用執行緒,減少執行緒建立,銷燬的開銷,是一種好的程式設計習慣。 (2)通過new Thread的方法建立執行緒難以管理,並且難以控制數量,執行緒的數量通常和系統的效能呈拋

執行組threadgroup、執行threadpool

基礎概念(百科) 在Java中每一個執行緒都歸屬於某個執行緒組管理的一員,例如在主函式main()主工作流程中產生一個執行緒,則產生的執行緒屬於main這個執行緒組管理的一員。簡單地說,執行緒組(ThreadGroup)就是由執行緒組成的管理執行緒的類,這個類是java.l

執行ThreadPool

以前在面試的時候遇見一個題:如果運用執行緒的時候需要返回一直值怎麼辦?由於運用執行緒時不管是繼承Thread類還是實現Runable介面在重寫run()時都沒有返回值的。 我當時給出的答案是:申請一個全域性變數,在run()方法裡面把需要返回的值賦值給全域性變數,當執行緒執