C#中CLR线程池(Thread Pool)的使用
C#中CLR提供了一个线程池(Thread Pool)的实现,叫做ThreadPool。CLR线程池的主要好处是:
- 线程池减少了线程创建、开始和停止的次数,提高了效率。
- 使用线程池可以使得程序员不必考虑多线程编程,而将注意力集中在业务逻辑上。
也有缺点:
- 线程池中的线程总是后台线程(主线程退出,则所有后台线程也停止,程序结束),而且不能设置优先级(总是ThreadPriority.Normal)。
- 不能使用一个标识来识别一个特定的线程。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;
namespace ThreadPoolTest { // 执行工作的类 class Worker { // 执行工作的函数 public void DoWork() { int threadCode = Thread.CurrentThread.GetHashCode(); Console.WriteLine( string.Format(": Work Starts.", threadCode)); Thread.Sleep(1000); Console.WriteLine( string.Format(": Work Ends.", threadCode)); } }
class Program
{
static void Main(string[] args)
{
// 主线程打印信息
Console.WriteLine(
"Main Thread: " + Thread.CurrentThread.GetHashCode());
// 构造工作函数
Worker worker = new Worker();
// 设置工作入口
WaitCallback workItem = new WaitCallback(DoCompute);
// 向CLR线程池提交20个工作
for (int i = 0; i < 20; i++)
{
ThreadPool.QueueUserWorkItem(workItem, worker);
}
Console.WriteLine("All Works Queued.");
Console.ReadLine();
}
// 线程池入口委托的实现
static void DoCompute(object state)
{
Worker worker = state as Worker;
if (worker != null)
{
// 执行工作
worker.DoWork();
}
}
}
}