using System; using System.Collections; using System.Threading; public class CRunMain { public static void Main() { CTestThread objTestThread = new CTestThread(10); objTestThread.Action(); } }; public class CTestThread { public CTestThread(int nNum) { Random objRand = new Random(1000); int i = 0; m_lsStr = new ArrayList(nNum); for (i = 0; i < nNum; i++) { m_lsStr.Add(objRand.Next().ToString()); } m_objThread1 = new Thread(new ThreadStart(Run)); m_objThread2 = new Thread(new ThreadStart(Run)); m_objThread1.Name = "Thread 1"; m_objThread2.Name = "Thread 2"; m_OnNumberClear += new EventHandler(OnNumClear); } public void Action() { m_objThread1.Start(); m_objThread2.Start(); } private void Run() { string strValue; while (true) { Monitor.Enter(this); //锁定,保持同步 strValue = (string)m_lsStr[0]; m_lsStr.RemoveAt(0);//删除ArrayList中的元素 Console.WriteLine(Thread.CurrentThread.Name + " delete " + strValue); if (0 == m_lsStr.Count) { OnNumClear(this, new EventArgs()); //引发完成事件 } Monitor.Exit(this); ////取消锁定 Thread.Sleep(0); } } //执行完成之后,停止所有线程 void OnNumClear(object objSend, EventArgs eve) { Console.WriteLine("all thread run end..."); m_objThread1.Abort(); m_objThread2.Abort(); } private Thread m_objThread1; private Thread m_objThread2; private ArrayList m_lsStr; private event EventHandler m_OnNumberClear; //数据删除完成引发的事件 };