1. 程式人生 > >[C#]獲得執行緒池中活動的執行緒數

[C#]獲得執行緒池中活動的執行緒數

轉自:http://blog.csdn.net/much0726/article/details/3846856

在C#中的執行緒池ThreadPool沒有獲得執行緒池中的活動執行緒數量的屬性或者是方法,但是有一兩個

方法可以幫助獲得活動執行緒數。
這兩個方法分別是:GetMaxThreads和GetAvailableThreads

查詢文件,這兩個方法的解釋分別是:
//檢索可以同時處於活動狀態的執行緒池請求的數目。所有大於此數目的請求將保持排隊狀態,直

到執行緒池執行緒變為可用。
public static void GetMaxThreads (
 out int workerThreads,
 out int completionPortThreads
)
引數
workerThreads


執行緒池中輔助執行緒的最大數目。

completionPortThreads
執行緒池中非同步 I/O 執行緒的最大數目。

//檢索由 GetMaxThreads 返回的執行緒池執行緒的最大數目和當前活動數目之間的差值。 
public static void GetAvailableThreads (
 out int workerThreads,
 out int completionPortThreads
)
引數
workerThreads
可用輔助執行緒的數目。

completionPortThreads
可用非同步 I/O 執行緒的數目。

理解了這兩個方法後,我發現想獲得當前活動執行緒數,只要把GetMaxThreads方法獲得的最大執行緒

數減GetAvailableThreads獲得的執行緒數,就是活動的執行緒數了。

示例程式碼: 

  1. int MaxWorkerThreads, miot, AvailableWorkerThreads, aiot;  
  2. //獲得最大的執行緒數量
  3. ThreadPool.GetMaxThreads(out MaxWorkerThreads, out miot);  
  4. AvailableWorkerThreads = aiot = 0;  
  5. //獲得可用的執行緒數量
  6. ThreadPool.GetAvailableThreads(out AvailableWorkerThreads, out aiot);  
  7. //返回執行緒池中活動的執行緒數
  8. return MaxWorkerThreads - AvailableWorkerThreads;  

小結

找了所有的ThreadPool的屬性和方法,都找不到相關的屬性,就查看了其他所有的方法和屬性,通過其他方法的曲線救國方式獲得了活動執行緒數.可以把上面的程式碼封裝成一個屬性.使用的時候記得Lock一下,因為執行緒的建立和銷燬是時刻在變的.

原創地址:http://blog.csdn.net/much0726/archive/2009/01/21/3846856.aspx

相關推薦

[C#]獲得執行活動執行

轉自:http://blog.csdn.net/much0726/article/details/3846856 在C#中的執行緒池ThreadPool沒有獲得執行緒池中的活動執行緒數量的屬性或者是方法,但是有一兩個 方法可以幫助獲得活動執行緒數。 這兩個方法分別是:GetMaxThreads和GetAva

C# 執行取消執行的三種方式

三種方式都使用CancellationToken,只是使用方式不同,有類似於採用全域性標誌位的方式 第一種 檢測IsCancellationRequested方式 static void AsyncOperation1(CancellationToken t

執行執行設定超時退出監控

前言 在寫多執行緒程式時,大多數情況下會先excutor建立執行緒池,然後再建立執行緒,但是對一些讀資料庫或者其他IO操作,容易堵住執行緒,此時就需要給執行緒設定超時時間,幹掉超時的執行緒再重新拉起一個執行緒來,但是java執行緒建立並沒有預留超時引數,研究了一下網上也沒找到

Java實現終止執行正在執行的定時任務

貼個廣告 樓主的部落格已全部搬遷至自己的部落格,感興趣的小夥伴請移步haifeiWu與他朋友們的部落格專欄 源於開發 最近專案中遇到了一個新的需求,就是實現一個可以動態新增定時任務的功能。說到這裡,有人可能會說簡單啊,使用quartz就好了,簡單粗暴。然而

監控執行執行發生未捕獲異常自動重啟功能

       之前專案要實現一個多執行緒發簡訊的功能,每個執行緒都對應一個kafka消費topic,但是偶爾會由於傳過來的資料或是資料庫的原因發生異常,之前為了專案趕進度都是用的try,catch捕獲的Exception異常直接處理掉了,最近有時間了感覺這樣很low,也很不專

java執行和關閉執行執行

如果執行緒經常喜歡去new的話是不對的,你需要一個池子管理。 newCachedThreadPool 這個一個帶快取的執行緒池,是個可以無限大的執行緒池,新建的執行緒放倒這個池子裡,當執行緒停掉了的時候,下個個執行緒進來,可以複用這個執行緒。 newFixe

執行捕獲執行執行異常

在專案中使用執行緒池時,使用瞭如下方式: ExecutorService dataUploadPool = Executors.newFixedThreadPool(writeThreadNum); dataUploadPool.execute(new

java執行任務執行完成後再次執行

最近做爬蟲用到了執行緒池(我是建立一個固定執行緒數量的執行緒池,然後不斷往裡扔任務) 現在要求網站連結如果爬完後再次啟動任務爬取連結,所以就想到線上程池中任務都執行完成後在重新啟動任務. demo如下: public static void ex(Connection c

ExecutorService 關閉 and 如何判斷執行任務執行完畢

ExecutorService 關閉1、shutdown 2、shutdownNow 3、awaitTermination當你使用ExecutorService的時候,你應該記得關閉它,這樣這些被管理的執行緒才會停止執行。舉例:如果你的應用通過main()方法啟動,並且你的

Java 執行執行複用是如何實現的?

前幾天,技術群裡有個群友問了一個關於執行緒池的問題,內容如圖所示: ![](https://img-blog.csdnimg.cn/20200614214310802.jpg) 關於執行緒池相關知識可以先看下這篇:[為什麼阿里巴巴Java開發手冊中強制要求執行緒池不允許使用Executors建立?

java執行以程式碼的順序執行,主要是記錄一下繼承執行的內容

1.這個是自定義的執行緒池類,直接上程式碼 package org.jimmy.threadtest20181121; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ThreadPoolExecut

定製在排程執行執行的任務

Java 9併發程式設計指南 目錄 定製在排程執行緒池中執行的任務 準備工作 實現過程 工作原理 擴充套件學習 更多關注 排程執行緒池是Executor框架基本執行緒池的擴充套件,排程在一段時間後執行任務。ScheduledTh

執行使用ThreadLocal方案

人工手打,翻譯自:https://moelholm.com/2017/07/24/spring-4-3-using-a-taskdecorator-to-copy-mdc-data-to-async-threads 本來想自己寫一篇關於執行緒池threadlocal的,偶然看到這篇文章覺得挺好的,便直接翻譯了

Java執行submit()和execute之間的區別?

一: submit()方法,可以提供Future < T > 型別的返回值。 executor()方法,無返回值。 execute無返回值 public void execute(Runnable command) { if (command == null)

執行ThreadPoolExecutor分析: 執行是什麼時候建立執行的,佇列的任務是什麼時候取出來的?

  帶著幾個問題進入原始碼分析: 執行緒池是什麼時候建立執行緒的? 任務runnable task是先放到core到maxThread之間的執行緒,還是先放到佇列? 佇列中的任務是什麼時候取出來的? 什麼時候會觸發reject策略? core到maxThread之間的執行緒什麼時候會di

執行的柵欄

多執行緒中有三個類,分別是CountDownLatch,CyclicBarrier,Semaphore。代表著執行緒中的柵欄。共享鎖。 CountDownLatch 在一組執行緒中,一個執行緒等待其他執行緒。我把它理解為門栓。 檢視該類的資料結構圖如下圖一 ​ 圖一 有一個靜態的內部類,Sync繼承自A

Java執行的核心執行是如何被重複利用的

在Java開發中,經常需要建立執行緒去執行一些任務,實現起來也非常方便,但如果併發的執行緒數量很多,並且每個執行緒都是執行一個時間很短的任務就結束了,這樣頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷燬執行緒需要時間。此時,我們很自然會想到使用執行緒池來解決這個問題。 使用執行緒池的好處

執行常用的阻塞佇列簡述

一、ArrayBlockingQueue 基於陣列的阻塞佇列,有界佇列,按照先進先出(FIFO)的形式,初始化是必須指定capacity.看一下原始碼: /**第一種構造方法,指定初始容量*/ public ArrayBlockingQueue(int capacity) {

關於執行的阻塞佇列BlockingQueue

       接上篇文章https://blog.csdn.net/GoSaint/article/details/84345210        對於BlockingQueue阻塞佇列而言,常用在多執行緒生產者

如何等待java執行所有任務完成

一、等待執行緒池所有執行緒完成: 有時候我們需要等待java thread pool中所有任務完成後再做某些操作,如想要等待所有任務完成,僅需呼叫threadPool.awaitTermination