黑马程序员技术交流社区

标题: 多线程的方法重入问题 [打印本页]

作者: 飞、    时间: 2013-10-16 12:08
标题: 多线程的方法重入问题
本帖最后由 飞、 于 2013-10-16 20:40 编辑

看视屏看到方法重入那,老师说先把报错关掉,后来有一截视频好象被剪了,所以对多线程的方法重入问题不是特别清楚,还请大虾们赐教
作者: 面朝大海,春暖    时间: 2013-10-16 12:45
本帖最后由 面朝大海,春暖 于 2013-10-16 12:49 编辑

所谓多线程方法重入就是多个线程调用同一个方法示例:

              Program PR = new Program();            Thread th = new Thread(new ThreadStart(PR.FS));
            th.Start();
            Thread th1 = new Thread(new ThreadStart(PR.FS));
            th1.Start();
//方法
       void PR.FS()
        {
            for (int i = 0; i < 1000; i++)
                Console.WriteLine(i);
        }
不过这样容易出现问题,会造成线程抢夺资源,建议用的时候加个Lock。。示例:
        void FS() {
        lock(this)
        {
            for (int i = 0; i < 1000; i++)
                Console.WriteLine(i);
        }
        }


作者: 硬别    时间: 2013-10-16 12:49
01./// <summary>  
02.        /// 多线程方法重入问题按钮  
03.        /// </summary>  
04.        /// <param name="sender"></param>  
05.        /// <param name="e"></param>  
06.        private void btnMethodProblem_Click(object sender, EventArgs e)  
07.        {  
08.            Thread thread = new Thread(ChangeText);    //这里可以直接把方法传入  
09.            thread.IsBackground = true;    //把线程设置为后台线程  
10.            thread.Start();  
11.        }  
12.  
13.        /// <summary>  
14.        /// 修改文本框里面的内容(循环取得文本框的值,然后让它自增,最后再把它赋值给文本框)  
15.        /// </summary>  
16.        private void ChangeText()  
17.        {  
18.            for (int i = 0; i < 10000; i++)  
19.            {  
20.                int a = int.Parse(txtNum.Text);  
21.                a++;  
22.                txtNum.Text = a.ToString();  
23.            }  
24.        }  

运行这段程序,其结果如图所示:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2