C#多線程之線程池(ThreadPool)
一、簡(jiǎn)介
前面介紹了平時(shí)用到的大多數(shù)的多線程的例子,但在實(shí)際開(kāi)發(fā)中使用的線程往往是大量的和更為復(fù)雜的,這時(shí),每次都創(chuàng)建線程、啟動(dòng)線程。從性能上來(lái)講,這樣做并不理想(因?yàn)槊渴褂靡粋€(gè)線程就要?jiǎng)?chuàng)建一個(gè),需要占用系統(tǒng)開(kāi)銷(xiāo));從操作上來(lái)講,每次都要啟動(dòng),比較麻煩。為此引入的線程池的概念。
好處:
- 1.減少在創(chuàng)建和銷(xiāo)毀線程上所花的時(shí)間以及系統(tǒng)資源的開(kāi)銷(xiāo)
- 2.如不使用線程池,有可能造成系統(tǒng)創(chuàng)建大量線程而導(dǎo)致消耗完系統(tǒng)內(nèi)存以及”過(guò)度切換”。
在什么情況下使用線程池?
- 1.單個(gè)任務(wù)處理的時(shí)間比較短
- 2.需要處理的任務(wù)的數(shù)量大
線程池最多管理線程數(shù)量=“處理器數(shù) * 250”。也就是說(shuō),如果您的機(jī)器為2個(gè)2核CPU,那么CLR線程池的容量默認(rèn)上限便是1000。通過(guò)線程池創(chuàng)建的線程默認(rèn)為后臺(tái)線程,優(yōu)先級(jí)默認(rèn)為Normal。
二、代碼
案例一:
class Program
{
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod1), new object()); //參數(shù)可選
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);
}
}
}
}運(yùn)行結(jié)果:

案例二:
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.");
}
}運(yùn)行結(jié)果:

到此這篇關(guān)于C#多線程之線程池(ThreadPool)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用C#表達(dá)式樹(shù)實(shí)現(xiàn)對(duì)象的深克隆(實(shí)例詳解)
C# 的表達(dá)式樹(shù)提供了一個(gè)強(qiáng)大的機(jī)制,可以將代碼以數(shù)據(jù)結(jié)構(gòu)的形式表示出來(lái),使得代碼可以在運(yùn)行時(shí)進(jìn)行檢查、修改或執(zhí)行,這為動(dòng)態(tài)查詢生成、代碼優(yōu)化和動(dòng)態(tài)編程提供了很多可能性,這篇文章主要介紹了使用C#強(qiáng)大的表達(dá)式樹(shù)實(shí)現(xiàn)對(duì)象的深克隆,需要的朋友可以參考下2024-05-05
c#調(diào)用存儲(chǔ)過(guò)程實(shí)現(xiàn)登錄界面詳解
2013-03-03
輕松學(xué)習(xí)C#的ArrayList類(lèi)
輕松學(xué)習(xí)C#的ArrayList類(lèi),對(duì)C#的ArrayList類(lèi)感興趣的朋友可以參考本篇文章,幫助大家更靈活的運(yùn)用C#的ArrayList類(lèi)2015-11-11
基于C#實(shí)現(xiàn)Windows服務(wù)狀態(tài)啟動(dòng)和停止服務(wù)的方法
這篇文章主要介紹了基于C#實(shí)現(xiàn)Windows服務(wù)狀態(tài)啟動(dòng)和停止服務(wù)的方法,詳細(xì)講述了實(shí)現(xiàn)這一功能的具體步驟,代碼簡(jiǎn)潔易懂,需要的朋友可以參考下2014-09-09
C#中Thread.CurrentThread的用法小結(jié)
本文主要介紹了C#中Thread.CurrentThread的用法小結(jié),通過(guò)Thread.CurrentThread可以訪問(wèn)和修改當(dāng)前線程的各種屬性和方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04

