C# - 线程操作

代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 //引用相应命名空间
  8 using System.Threading;
  9 using System.Collections;
 10 
 11 namespace ThreadDemo
 12 {
 13     class ThreadDemo
 14     {
 15 
 16         private Thread thread1;
 17 
 18         private Thread thread2;
 19 
 20         private ArrayList arraylist;
 21 
 22         //删除所有数据之后,执行事件
 23         private event EventHandler OnNumberClear;
 24 
 25         /// <summary>
 26         /// 构造函数
 27         /// </summary>
 28         /// <param name="Number">数字</param>
 29         public ThreadDemo(int Number)
 30         {
 31             //创建随机对象
 32             Random db = new Random(1000000);
 33 
 34             //创建数组
 35             arraylist = new ArrayList(Number);
 36 
 37             //循环将产生的随机数放到数组中。
 38             for (int i = 0; i < Number; i++)
 39             {
 40                 arraylist.Add(db.Next().ToString());
 41             }
 42 
 43             //ThreadStart表示在此线程上调用的方法
 44             thread1 = new Thread(new ThreadStart(Run));
 45 
 46             //ThreadStart表示在此线程上调用的方法
 47             thread2 = new Thread(new ThreadStart(Run));
 48 
 49             OnNumberClear += ThreadDemo_OnNumberClear;
 50         }
 51 
 52         /// <summary>
 53         /// 事件执完成之后,执行事件
 54         /// </summary>
 55         /// <param name="sender"></param>
 56         /// <param name="e"></param>
 57         void ThreadDemo_OnNumberClear(object sender, EventArgs e)
 58         {
 59             Console.WriteLine("执行完成,停止所有线程!");
 60             thread1.Abort();//终止线程
 61             thread2.Abort(); //终止线程
 62         }
 63 
 64         /// <summary>
 65         /// 两个线程要执行的方法
 66         /// </summary>
 67         public void Run()
 68         {
 69             string stringValue = null;
 70             while (true)
 71             {
 72                 Monitor.Enter(this);//锁定,保持同步
 73                 stringValue = (string)arraylist[0];
 74                 Console.WriteLine(Thread.CurrentThread.Name + "删除了" + stringValue);
 75                 arraylist.RemoveAt(0);//删除ArrayList中的元素
 76                 if (arraylist.Count == 0)
 77                 {
 78                     OnNumberClear(this, new EventArgs());//引发完成事件
 79                 }
 80                 Monitor.Exit(this);//取消锁定
 81                 Thread.Sleep(5);
 82             }
 83         }
 84 
 85         /// <summary>
 86         /// 启动两个线程
 87         /// </summary>
 88         public void Active()
 89         {
 90 
 91             thread1.Start();
 92             thread2.Start();
 93         }
 94 
 95 
 96         /// <summary>
 97         /// Main
 98         /// </summary>
 99         public static void Main()
100         {
101             ThreadDemo th = new ThreadDemo(200);
102 
103             th.Active();
104         }
105     }
106 }

 

posted on 2015-05-19 17:07  ultrastrong  阅读(174)  评论(0编辑  收藏  举报