.Net平台多线程编程入门
一、 概述
1、进程:内存独立的运算单元,有数据区域和代码区域组成。
2、一个进程可以有多个线程
3、线程:CPU可以独立执行的单元
4、多线程编程 作用
4.1、充分利用CPU资源
4.2、改善用户体验
二、 .net平台的多线程的编程
1、使用System.Threading命名空间中的类来封装了多线程的编程
2、.net程序的线程特点
2.1、托管的多线程
2.2、默认有一个主线程
2.3、需要使用多线程, 需要手动创建Thread
2.4、需要频繁创建释放线程的情况, 可以使用ThreadPool
三、 具体编码
1、导入命名空间System.Threading
2、需要线程就new一个Thread
3、需要使用ThreadStart委托去引用一个此线程启动方法
4、线程的控制
4.1、Start() //开始一个线程
4.2、Abort() //终止一个线程
4.3、Suspend(); //暂停,需要手动恢复
4.4、Resume(); //恢复
4.5、Join(int); //暂停一定的时间,自动恢复
4.6、Priority //线程的优先级别
4.7、ThreadState //线程当前的状态
4.8、Name //线程的名字
4.9、IsBackground //是否是后台线程; “后台线程”含义:此线程的主线程关闭, 则此线程也释放
5、Thread类的静态方法属性
5.1、Thread.Sleep(int)让当前线程休眠一定时间
5.2、Thread.CurrentThread 取当前线程
四、 winform UI的线程特点
1、.net2.0规定,在那个线程中创建的控件, 就只能在此线程中操作其属性
2、若需要在非创建窗体的主线程里操作窗体的控件, 需要使用如下代码:
this.Invoke(new MethodInvoker(delegate()
{
//操作控件的代码
}));
五、 B/S结构程序线程特点
由于手动创建的独立线程不与某个具体的请求相关, 所以在B/S结构程序中创建的线程代码不能去取当前上下文对象
(HttpContext/Request/Response/Session/Application/Cache……)。
六、 线程的安全性
1、临界区:多个线程共享资源
2、多线程编程为了实现线程安全,不需要保证 临界区 同时只能有1个线程对其进行操作
3、语法:
3.1、C#
lock (this)
{
//操作临界区代码
}
3.2、.Net
Monitor.Enter(this);
//操作临界区代码
Monitor.Exit(this);
七、 多线程运用场合总结
1、Socket编程
2、复杂运算,需要充分利用CPU资源, 特别目标机器是多核架构
3、需要改善软件用户体验