CLR线程池

时间:2021-07-08 15:41:05

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 = ; i < ; i++)
{
ThreadPool.QueueUserWorkItem(callback,i);
}
Console.ReadLine();
} }
public class printer
{
public void Print(object obj)
{
lock (this)
{
if (Convert.ToInt32(obj) < )
{
Console.WriteLine(obj.ToString()+" 在等待");
Monitor.Wait(this);
Console.WriteLine(obj.ToString());
}
else
{
Monitor.PulseAll(this);
Console.WriteLine(obj.ToString());
}
} }
}

线程池的好处:

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

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

  1. 如果需要前台线程或设置优先级别,或者线程池中的线程总是后台线程,且它的优先级是默认的
  2. 如果需要有一个带有固定标志的线程便于退出、挂起或通过名字发现它