1  class ThreadDemo
 2     {
 3         private Thread[] threads;
 4         private int thrs = 10;//线程数量
 5         private ArrayList stringList;
 6         private event EventHandler OnNumberClear;//数据删除完引发的事件
 7         public ThreadDemo(int number)
 8         {
 9             stringList = new ArrayList();
10             for (int i = 0; i < number; i++)
11             {
12                 stringList.Add(i.ToString());
13             }
14             threads = new Thread[thrs];
15             for (int i = 0; i < thrs; i++)
16             {
17                 threads[i] = new Thread(new ParameterizedThreadStart(run));
18                 threads[i].Name = "线程:" + (i + 1);
19             }
20             OnNumberClear += new EventHandler(ThreadDemo_OnNumberClear);
21         }
22         public void Action()
23         {
24             for (int i = 0; i < thrs; i++)
25             {
26                 threads[i].Start((object)"Prince");
27             }
28         }
29         //注意参数一定要是 object 类型。多参数的话可以考虑用 struct类型
30         public void run(object para)
31         {
32             string stringValue = null;
33             while (true)
34             {
35                 Monitor.Enter(this);
36                 stringValue = (string)stringList[0];
37                 Console.WriteLine(Thread.CurrentThread.Name + "删除了:" + para + " === " + stringValue);
38                 stringList.RemoveAt(0);
39                 if (stringList.Count == 0)
40                 {
41                     OnNumberClear(nullnull);
42                 }
43                 Monitor.Exit(this);
44                 Thread.Sleep(2000);
45             }
46         }
47         void ThreadDemo_OnNumberClear(object sender, EventArgs e)
48         {
49             Console.WriteLine("执行完所有的线程");
50             for (int i = 0; i < thrs; i++)
51                 threads[i].Abort();
52         }
53     }

 

posted on 2010-02-20 17:23  晃晃悠悠  阅读(398)  评论(0)    收藏  举报