C#中CLR线程池(Thread Pool)的使用

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]

发表评论