C#中CLR提供了一个线程池(Thread Pool)的实现,叫做ThreadPool。CLR线程池的主要好处是:
- 线程池减少了线程创建、开始和停止的次数,提高了效率。
- 使用线程池可以使得程序员不必考虑多线程编程,而将注意力集中在业务逻辑上。
也有缺点:
- 线程池中的线程总是后台线程(主线程退出,则所有后台线程也停止,程序结束),而且不能设置优先级(总是ThreadPriority.Normal)。
- 不能使用一个标识来识别一个特定的线程。
[code=’c#’]
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(“[Thread {0}]: Work Starts.”, threadCode));
Thread.Sleep(1000);
Console.WriteLine(
string.Format(“[Thread {0}]: 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();
}
}
}
}
[/code]