C#多線程之線程池(ThreadPool)
更新時間:2022年04月20日 10:01:22 作者:農碼一生
這篇文章介紹了C#多線程之線程池(ThreadPool)的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
一、簡介
前面介紹了平時用到的大多數的多線程的例子,但在實際開發(fā)中使用的線程往往是大量的和更為復雜的,這時,每次都創(chuàng)建線程、啟動線程。從性能上來講,這樣做并不理想(因為每使用一個線程就要創(chuàng)建一個,需要占用系統開銷);從操作上來講,每次都要啟動,比較麻煩。為此引入的線程池的概念。
好處:
- 1.減少在創(chuàng)建和銷毀線程上所花的時間以及系統資源的開銷
- 2.如不使用線程池,有可能造成系統創(chuàng)建大量線程而導致消耗完系統內存以及”過度切換”。
在什么情況下使用線程池?
- 1.單個任務處理的時間比較短
- 2.需要處理的任務的數量大
線程池最多管理線程數量=“處理器數 * 250”。也就是說,如果您的機器為2個2核CPU,那么CLR線程池的容量默認上限便是1000。通過線程池創(chuàng)建的線程默認為后臺線程,優(yōu)先級默認為Normal。
二、代碼
案例一:
class Program
{
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod1), new object()); //參數可選
Console.ReadKey();
}
public static void ThreadMethod1(object val)
{
for (int i = 0; i <= 10000; i++)
{
if (i % 1000 == 0)
{
if (string.IsNullOrEmpty(Thread.CurrentThread.Name) )
{
Thread.CurrentThread.Name = "Thred_" + i;
}
Console.WriteLine("循環(huán){0}次的線程的線程名稱為:{1}",i,Thread.CurrentThread.Name);
}
}
}
}運行結果:

案例二:
class Program
{
public static void Main()
{
// Queue the task.
ThreadPool.QueueUserWorkItem(ThreadProc);
Console.WriteLine("Main thread does some work, then sleeps.");
Thread.Sleep(1000);
Console.WriteLine("Main thread exits.");
Console.ReadKey();
}
// This thread procedure performs the task.
static void ThreadProc(Object stateInfo)
{
// No state object was passed to QueueUserWorkItem, so stateInfo is null.
Console.WriteLine("Hello from the thread pool.");
}
}運行結果:

到此這篇關于C#多線程之線程池(ThreadPool)的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
基于C#實現Windows服務狀態(tài)啟動和停止服務的方法
這篇文章主要介紹了基于C#實現Windows服務狀態(tài)啟動和停止服務的方法,詳細講述了實現這一功能的具體步驟,代碼簡潔易懂,需要的朋友可以參考下2014-09-09

