Skip to content

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();
        }
    }
}

}