C# ThreadPool理解

来源:互联网 发布:最近淘宝网页打不开 编辑:程序博客网 时间:2024/06/14 05:37

在程序中,我们经常会遇到需要多线程处理的情况,此时我们需要开辟线程,但是开辟线程的过程代价比较高。通常我们可以通过开辟线程池(ThreadPool)来实现线程,当我们需要使用线程时,我们可以根据需求来从ThreadPool中取出线程对象;当我们使用完线程时,我们可以将相应的线程对象归还给ThreadPool。线程池可以想尽办法来复用线程,因为线程的开辟代价太大,这样可以提高程序的效率。
对于线程池,我们只需要把工作函数丢给线程池我们就可以完成相应任务,对于如何完成任务完全有系统进行控制,因此我们无法左右。我们无法设计整个线程的优先级,执行顺序等等,因此以下情况不适合用ThreadPool:
(1)线程执行时间比较长
(2)线程需要指定优先级
(3)在执行过程中需要对线程进行操作,例如sleep,挂起等等。
对于线程池ThreadPool,比较常见的方法有:

public static Boolean QueueUserWorkItem(WaitCallback wc, Object state);// State: 这个参数也是非常重要的,当执行带有参数的回调函数时,该参数会将引用传入,回调方法中,供其使用public static bool SetMaxThreads(int workerThreads,int completionPortThreads);public static bool SetMinThreads(int workerThreads,int completionPortThreads);
 class Program    {       static void WaitCallBackMethod(object _object)        {            for (int i = 0; i < 5; i++)            {                Console.WriteLine("这是第{0}个线程", _object);                Thread.Sleep(1000);            }        }        static void Main(string[] args)        {            for (int i = 0; i <= 3; ++i)            {                                             ThreadPool.QueueUserWorkItem(WaitCallBackMethod, i);            }            Console.ReadKey();        }        }
0 0
原创粉丝点击