多线程和线程池使用

 

     //定义个委托 
        public delegate string MethodCaller(string name);

        //返回名字的方法
        public string GetName(string name)    
        {
            System.Threading.Thread.Sleep(10000);
            return name;
        }

        //主程序
        public ActionResult Main()
        {
            string name = "王五";//输入参数 

            MethodCaller mc = new MethodCaller(GetName);

            IAsyncResult result = mc.BeginInvoke(name, null, null);

            IAsyncResult result1 = mc.BeginInvoke("张三", null, null);

            IAsyncResult result2 = mc.BeginInvoke("李四", null, null);
            
            string myname = mc.EndInvoke(result);//用于接收返回值 

            string myname1 = mc.EndInvoke(result1);//用于接收返回值 

            string myname2 = mc.EndInvoke(result2);//用于接收返回值 
       
       //线程池,此时GetName方法的参数必须是object state。也就是说 public string GetName(object name){},才可以使用线程池的方法。
       //由于线程的创建和销毁需要耗费一定的开销,过多的使用线程会造成内存资源的浪费,出于对性能的考虑,于是引入了线程池的概念。线程池维护一个请求队列,线程
       //池的代码从队列提取任务,然后委派给线程池的一个线程执行,线程执行完不会被立即销毁,这样既可以在后台执行任务,又可以减少线程创建和销毁所带来的开销。
       //线程池线程默认为后台线程(IsBackground),开启线程池,只需下面一句话即可。
       System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(GetName),"六"); }

 参考文章:http://blog.jobbole.com/89261/

posted @ 2016-07-26 15:44    阅读(460)  评论(0编辑  收藏  举报