时间:2016-11-2来源:本站原创作者:佚名

一般来讲,我们都是利用Thread类来创建线程,然后线程的创建和销毁会耗费大量的时间,这样的手动操作将造成性能损失。因此,为了避免因通过Thread手动创建爱你线程而造成的损失,.NET引入了线程池机制。

  线程池用来存放应用程序中要使用的线程集合,你可以将它理解为一个存放线程的地方,这种击中存放的方式有利于对线程进行管理。

  CLR初始化时,线程池中没有线程的。在内部,线程池维护了一个操作请求队列,当应用程序想要执行一个异步操作时,你需要调用QueueUserWorkItem的方法来将对应的任务添加到线程池的请求队列中。线程池的实现代码会从队列中提取任务,并将其委派给线程池中的线程去执行。如果,线程池中没有空闲的线程,线程池就会创建一个新线程去执行任务。而当线程池线程执行完任务之后,线程也不会被销毁。,而是返回到线程中,等待响应另外的请求,由于线程池不会销毁,所以也就避免了由此产生的性能。

  要使用线程池的线程,需要调用静态方法ThreadPool.QueueUserWorkItem。以指定线程要调用的方法,该静态方法有两个重载版本:

publicstaticboolQueueUserWorkItem(WaitCallbackcallback);publicstaticboolQueueUserWorkItem(WaitCallbackcallback,Objectstate);

  这两个方法用于从线程池队列添加一个工作项以及一个可选的状态数据。然后,这两个方法就会立即返回。工作项是指一个有callback参数标志的委托对象,被委托对象包装的回调方法将由线程池线程来执行。

  下面看看具体的演示代码:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;namespace线程池{classProgram{staticvoidMain(string[]args){Console.WriteLine(主线程ID={0},Thread.CurrentThread.ManagedThreadId);ThreadPool.QueueUserWorkItem(CallBackWorkItem);ThreadPool.QueueUserWorkItem(CallBackWorkItem,work);Thread.Sleep();Console.WriteLine(主线程退出);Console.ReadKey();}privatestaticvoidCallBackWorkItem(objectstate){Console.WriteLine(线程池线程开始执行);if(state!=null){Console.WriteLine(线程池线程ID={0}传入的参数为{1},Thread.CurrentThread.ManagedThreadId,state.ToString());}else{Console.WriteLine(线程池线程ID={0},Thread.CurrentThread.ManagedThreadId);}}}}

  执行结果:

  

文章来源:C++技术网原创文章版权所有,未经授权,禁止转载。









































西宁治疗白癜风医院
什么药治疗白癜风

转载请注明原文网址:http://www.helimiaopu.com/cksc/1246.html

------分隔线----------------------------