黑马程序员技术交流社区
标题:
多线程的方法重入问题
[打印本页]
作者:
飞、
时间:
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