CLR线程池

WaitCallback 表示要在 ThreadPool 线程上执行的回调方法。 创建委托,方法是将回调方法传递给 WaitCallback 构造函数。 您的方法必须具有此处所显示的签名。


如果想使用线程池中的工作线程排队执行一个方法,可以使用ThreadPool.QueueUserWorkItem()方法。这个方法被重载的方法可以让你传递一个可选的object类型的自定义状态数据给waitCallBack委托实例

 public class Program
    {
        //出现的问题:dish类与其他两类的对应关系
        //多线程针对的是什么,共享那块怎么处理
        static void Main(string[] args)
        {
            Console.WriteLine("-----------------------------");
          //  Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
            WaitCallback callback = new WaitCallback(new printer().Print);
            for (int i = 0; i < 10; i++)
            {
                ThreadPool.QueueUserWorkItem(callback,i);
            }
                Console.ReadLine();
        }
        
    }
    public class printer
    {
      public  void Print(object obj)
        {
            lock (this)
            {
                if (Convert.ToInt32(obj) < 5)
                {
                    Console.WriteLine(obj.ToString()+" 在等待");
                    Monitor.Wait(this);
                    Console.WriteLine(obj.ToString());
                }
                else
                {
                    Monitor.PulseAll(this);
                    Console.WriteLine(obj.ToString());
                }
            }
         
       
        }
    }

线程池的好处:

  1. 减少了线程创建、开始和停止的次数,提高了效率。
  2. 能够使我们将注意力放到业务逻辑上而不是多线程架构上。

然而,在某些特殊情况应优先使用手工线程管理。比如:

  1. 如果需要前台线程或设置优先级别,或者线程池中的线程总是后台线程,且它的优先级是默认的
  2. 如果需要有一个带有固定标志的线程便于退出、挂起或通过名字发现它
原文地址:https://www.cnblogs.com/wangzhenghua/p/4448598.html