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()); } } } }
线程池的好处:
- 减少了线程创建、开始和停止的次数,提高了效率。
- 能够使我们将注意力放到业务逻辑上而不是多线程架构上。
然而,在某些特殊情况应优先使用手工线程管理。比如:
- 如果需要前台线程或设置优先级别,或者线程池中的线程总是后台线程,且它的优先级是默认的
- 如果需要有一个带有固定标志的线程便于退出、挂起或通过名字发现它