class ThreadDemo  
   {  
       private Thread[] threads;  
       private int thrs = 10;//线程数量  
       private ArrayList stringList;  
       private event EventHandler OnNumberClear;//数据删除完引发的事件  
       public ThreadDemo(int number)  
       {  
           stringList = new ArrayList();  
           for (int i = 0; i < number; i++)  
           {  
               stringList.Add(i.ToString());  
           }  
           threads = new Thread[thrs];  
           for (int i = 0; i < thrs; i++)  
           {  
               threads[i] = new Thread(new ParameterizedThreadStart(run));  
               threads[i].Name = "线程:" + (i + 1);  
           }  
           OnNumberClear += new EventHandler(ThreadDemo_OnNumberClear);  
       }  
       public void Action()  
       {  
           for (int i = 0; i < thrs; i++)  
           {  
               threads[i].Start((object)"Prince");  
           }  
       }  
       //注意参数一定要是 object 类型。多参数的话可以考虑用 struct类型  
       public void run(object para)  
       {  
           string stringValue = null;  
           while (true)  
           {  
               Monitor.Enter(this);  
               stringValue = (string)stringList[0];  
               Console.WriteLine(Thread.CurrentThread.Name + "删除了:" + para + " === " + stringValue);  
               stringList.RemoveAt(0);  
               if (stringList.Count == 0)  
               {  
                   OnNumberClear(null, null);  
               }  
               Monitor.Exit(this);  
               Thread.Sleep(2000);  
           }  
       }  
       void ThreadDemo_OnNumberClear(object sender, EventArgs e)  
       {  
           Console.WriteLine("执行完所有的线程");  
           for (int i = 0; i < thrs; i++)  
               threads[i].Abort();  
       }  
   }

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wangzi041/archive/2009/05/05/4151627.aspx

 posted on 2009-07-13 17:24  dongpo  阅读(1026)  评论(0编辑  收藏  举报