您的位置:首页 > 移动开发 > Objective-C

多线程操作简单实例

2011-12-13 11:24 543 查看
public class  Demo

{

     //defined  thread and space

       private Thread thOne;

        private Thread thTwo;

        private ArrayList strList;

        private string strThName = string.Empty;

        public StringBuilder sbText = new StringBuilder();

        private event EventHandler OnNumberClear;//define event on task is done

    public void LoadThread()

        {

            Random random = new Random(1000000);

            strList = new ArrayList(1000);

            for (int i = 0; i < 1000; i++)

            {

                strList.Add(random.Next().ToString());

            }

            thOne = new Thread(new ThreadStart(Run));

            thTwo = new Thread(new ThreadStart(Run));

            thOne.Name = "th1";

            thTwo.Name = "th2";

            OnNumberClear += new EventHandler(OnTaskDone);

 

        }

 //start the two thread

        public void Action()

        {

            thOne.Start();

            thTwo.Start();

        }

 

 

 //the same task of two threads

        public void Run()

        {

            string str = null;

           

            while (true)

            {

                Monitor.Enter(this);//lock,keep sync

                str = (string)strList[0];

                string temp = "";

                //System.Web.HttpContext.Current.Response.Write(Thread.CurrentThread.Name + "deleted " + str +"<br>");

                if (Thread.CurrentThread.Name != "th1")

                {

                    strThName = Thread.CurrentThread.Name;

                    temp = "<strong>" + Thread.CurrentThread.Name +"</strong>";

                }

                else temp = Thread.CurrentThread.Name;

                sbText.Append(temp + " deleted " + str + "," + (strList.Count - 1).ToString() + "left.<br>");

                strList.RemoveAt(0);

                if (strList.Count == 0)

                {

                    OnNumberClear(this, new EventArgs());

                }

                Monitor.Exit(this);

                Thread.Sleep(5);

            }

        }

        public void OnTaskDone(object sender,EventArgs e)

        {

            //System.Web.HttpContext.Current.Response.Write("remove all thread<br>");

            sbText.Append("remove all thread<br>");

            thOne.Abort();

            thTwo.Abort();

        }

  public Demo()

        {

            LoadThread();

            Action();

        }

}

 

 

//impletation

 

//            Response.Write(demo.sbText.ToString());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息