A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飞、 中级黑马   /  2013-10-16 12:08  /  1474 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 飞、 于 2013-10-16 20:40 编辑

看视屏看到方法重入那,老师说先把报错关掉,后来有一截视频好象被剪了,所以对多线程的方法重入问题不是特别清楚,还请大虾们赐教

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 面朝大海,春暖 于 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);
        }
        }

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
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.        }  

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

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马