黑马程序员—学习笔记之C#多线程
2011-11-28 16:26
495 查看
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://net.itheima.com/
一、进程与线程
(一)进程
简单的说,一个程序就是一个进程
(二)线程
线程是程序中的一个执行流。每个线程都有自己专有的寄存器(储存栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/47446d567f6ae8e54b3650b75b124df3.gif)
(三)多线程
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行执行的线程来完成各自的任务
1.CPU通过线程执行代码,如同商店通过工人来做店里要做的事情(如打扫、卖东西)
2.同一个进程中的多个线程可以“并发”执行。所谓“并发”执行,并不是真正的同时执行
3.一个CPU在同一时刻只能执行一个线程。如果只有一个CPU,则CPU在多个线程之间来回切换
4.线程中包含寄存器,存储CPU执行到这个线程的哪一步。这样CPU在多个线程之间来回切换的时候就知道该从哪里继续
(四)进程与线程之间的关系
一个进程至少包括一个线程,即默认线程(主线程、UI线程)
(五)net中如何实现多线程
1.线程就是一个工人(帮工)。所以要产生一个线程,就必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码。(找个人来坐一件事情)
2.线程启动时,通过委托调用该方法。线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法
3.线程运行完所要执行的代码后自动停掉。
(六)前台线程和后台线程
1.前台线程:只有所有的前台线程都关闭才能完成程序关闭
2.后台线程:只要所有的前台线程都关闭则后台线程自动结束。
threadFirst.Background = true; //把线程设置为后台线程
二、Thread类
Thread 实例名 = new Thread(方法名);
执行带参数的方法和带多个参数的方法,则将方法的传入参数类型设为object
(一)执行带参数的方法
(二)执行带多个参数的方法
(三)Start()方法
并不表示线程开始执行,而是表示该线程可以被CPU执行
(四)Abort()方法
在调用此方法的线程上引发ThreadAbortException,以终止线程。
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://net.itheima.com/
一、进程与线程
(一)进程
简单的说,一个程序就是一个进程
(二)线程
线程是程序中的一个执行流。每个线程都有自己专有的寄存器(储存栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/05/47446d567f6ae8e54b3650b75b124df3.gif)
(三)多线程
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行执行的线程来完成各自的任务
1.CPU通过线程执行代码,如同商店通过工人来做店里要做的事情(如打扫、卖东西)
2.同一个进程中的多个线程可以“并发”执行。所谓“并发”执行,并不是真正的同时执行
3.一个CPU在同一时刻只能执行一个线程。如果只有一个CPU,则CPU在多个线程之间来回切换
4.线程中包含寄存器,存储CPU执行到这个线程的哪一步。这样CPU在多个线程之间来回切换的时候就知道该从哪里继续
(四)进程与线程之间的关系
一个进程至少包括一个线程,即默认线程(主线程、UI线程)
(五)net中如何实现多线程
1.线程就是一个工人(帮工)。所以要产生一个线程,就必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码。(找个人来坐一件事情)
2.线程启动时,通过委托调用该方法。线程启动时,调用传过来的委托,委托就会执行相应的方法,实现线程执行方法
3.线程运行完所要执行的代码后自动停掉。
(六)前台线程和后台线程
1.前台线程:只有所有的前台线程都关闭才能完成程序关闭
2.后台线程:只要所有的前台线程都关闭则后台线程自动结束。
threadFirst.Background = true; //把线程设置为后台线程
二、Thread类
Thread 实例名 = new Thread(方法名);
执行带参数的方法和带多个参数的方法,则将方法的传入参数类型设为object
(一)执行带参数的方法
void ShowName(object name) { MessageBox.Show(name.ToString()); } private void btnMultipleThreadWithParameter_Click(object sender, EventArgs e) { Thread threadShowName = new Thread(ShowName); threadShowName.IsBackground = true; threadShowName.Start("刘德华"); }
(二)执行带多个参数的方法
void ShowManyName(object names) { List<string> nameList = names as List<string>; foreach(string name in nameList) { MessageBox.Show(name); } } private void btnMultipleThreadWithManyParameters_Click(object sender, EventArgs e) { Thread threadShowName = new Thread(ShowManyName); threadShowName.IsBackground = true; threadShowName.Start(new List<string>() { "刘德华","周杰伦","陈奕迅"}); }
(三)Start()方法
并不表示线程开始执行,而是表示该线程可以被CPU执行
(四)Abort()方法
在调用此方法的线程上引发ThreadAbortException,以终止线程。
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 详细请查看:http://net.itheima.com/
相关文章推荐
- C#学习笔记之多线程
- 黑马程序员之C#学习笔记: C#中Tostring参数机用法详解
- 黑马程序员之C#编程基础学习笔记:提示用户输入用户名,然后再提示输入密码,如果用户名是"admin"并且密码是“888888”,则提示正确,否则提示错误,如果用户名不是admin还提示用户用户名不存在
- [C#]C#学习笔记-多线程
- 黑马程序员之C#学习笔记:将EXCEL表中的数据导入到后台数据库
- 黑马程序员 学习笔记二:多线程之Runnable接口
- 黑马程序员之C#学习笔记:随机产生1-100的随即数插入到数组中,数字不能有重复
- 黑马程序员--Java基础学习笔记【序列化、多线程】
- 黑马程序员—学习笔记C#之socket
- 黑马程序员之C#学习笔记:面向对象小结
- 黑马程序员之C#学习笔记:枚举以及将字符串转换为枚举学习心得
- 黑马程序员之C#学习笔记:使用Stream.Read方法从流中读取字节
- 黑马程序员之C#学习笔记:C#中属性与索引的区别
- 黑马程序员-C#编程基础之变量-学习笔记
- 黑马程序员 C#学习笔记⑦ 文件系统数据一FileStream
- 黑马程序员之C#学习笔记:求一个字符串中各个字符出现的次数
- 黑马程序员之C#编程基础学习笔记:提示用户输入年龄,如果大于等于18,则告知用户可以查看,如果小于10岁,则告知不允许查看,如果大于等于10岁,则提示用户是否继续查看(yes,no),如果输入的是ye
- 黑马程序员之c#学习笔记:C#值类型和引用类型区别
- 黑马程序员之C#学习笔记:Visual Studio 2010生成解决方案时,提示磁盘空间不足!
- 黑马程序员之C#学习笔记: 抽象类总结