您的位置:首页 > 编程语言 > C#

『C#基础』多线程笔记「四」线程池

2012-03-30 11:48 239 查看
现在到了关于多线最简单使用的最后一篇笔记。

无论从什么角度来看,每一项事物都应该有其所在的空间,而对于线程来说,线程池就是它所存在的空间,或者叫容器了。

关于线程池理论上的讲解,我找了几个大牛的文章链接,想要深入学习的可以去看下~

http://www.cnblogs.com/jeffreyzhao/archive/2009/07/22/thread-pool-1-the-goal-and-the-clr-thread-pool.html
/article/4583109.html
http://www.cnblogs.com/jeffreyzhao/archive/2009/10/20/thread-pool-3-lab.html
http://kb.cnblogs.com/page/42531/

接下来,看看这个线程池是如何使用的吧!

概念:

ManualResetEvent,通知一个或多个正在等待的线程已发生事件
ManualResetEvent.Set(),将事件状态设置为终止状态,允许一个或多个等待线程继续
ThreadPool.QueueUserWorkItem(…),将方法排入队列以便执行,并指定包含所用数据的对象。
WaitHandle.WaitAll(…),等待指定数组中的所有元素都收到信号

说明:

如果只是从代码的使用上看,将一个方法加入线程池,只需要一行ThreadPool.QueueUserWorkItem(<方法名>),再加上一个ManualResetEvent对象,并不要忘记在方法执行完毕后,Set一下,这个就可以了。

而对于更深一个层次的使用,就需要对CLR的远行机制以及对个人所要应用的项目特性进行了解、深入了。但是这明显不符合这篇笔记的主要目的,所以也就没必要去深究它了。

如果想要更深入的了解,就去看上面已经给出的几个大牛的文章吧~

代码:

「我的最简代码」WorkerClass        public void Do(Object threadContext)
{
Console.WriteLine(Thread.CurrentThread.Name + this.WorkerName);
Console.WriteLine(threadContext.ToString());
}


成果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: